static_cast(expression) 例如,假设你想把一个int转换成double,以便让包含int类型变量的表达式产生出浮点数值的结果。如果用C风格的类型转换,你能这样写: int firstNumber, secondNumber; ... double result = ((double)firstNumber)/secondNumber; 如果用上述新的类型转换方法,你应该这样写: double result = static_cast(firstNumber)/secondNumber; 这样的类型转换不论是对人工还是对程序都很容易识别。 static_cast在功能上基本上与C风格的类型转换一样强大,含义也一样。它也有功能上限制。例如,你不能用static_cast象用C风格的类型转换一样把struct转换成int类型或者把double类型转换成指针类型. 关于reinterpret_cast,使用这个操作符的类型转换,其的转换结果几乎都是执行期定义(implementation-defined)。因此,使用reinterpret_casts的代码很难移植。 reinterpret_casts的最普通的用途就是在函数指针类型之间进行转换。例如,假设你有一个函数指针数组: typedef void (*FuncPtr)(); // FuncPtr is 一个指向函数 // 的指针,该函数没有参数 // 返回值类型为void FuncPtr funcPtrArray[10]; // funcPtrArray 是一个能容纳 // 10个FuncPtrs指针的数组 让我们假设你希望(因为某些莫名其妙的原因)把一个指向下面函数的指针存入funcPtrArray数组: int doSomething(); 你不能不经过类型转换而直接去做,因为doSomething函数对于funcPtrArray数组来说有一个错误的类型。在FuncPtrArray数组里的函数返回值是void类型,而doSomething函数返回值是int类型。 funcPtrArray[0] = &doSomething // 错误!类型不匹配 reinterpret_cast可以让你迫使编译器以你的方法去看待它们: funcPtrArray[0] = // this compiles reinterpret_cast(&doSomething); 转换函数指针的代码是不可移植的(C++不保证所有的函数指针都被用一样的方法表示),在一些情况下这样的转换会产生不正确的结果
标签:cast,C++,static
版权声明:文章由 淘百问 整理收集,来源于互联网或者用户投稿,如有侵权,请联系我们,我们会立即处理。如转载请保留本文链接:https://www.taobaiwen.com/life/10418.html