C/C++ cast

类型转换:
因为要覆盖通常的标准转换,所以需显式使用强制类型转换。
显式使用强制类型转换的另一个原因是:可能存在多种转换时,需要选择一
种特定的类型转换。我们将在第 14 章中详细讨论这种情况。

命名的强制类型转换符号的一般形式如下:
cast-name<type>(expression);
其中 cast-name 为 static_cast、dynamic_cast、const_cast 和reinterpret_cast
int rst=10;
double b=10.23;
rst*=static_cast<int>(b);//为了防止把rst转换为double这个不必要转换

static_cast
可以执行指针到指针的转换,或实例本身到实例本身的转换,但不能在实例和指针之间转换。
或者类型没有提供对应转换也会出错
编译器隐式执行的任何类型转换都可以由 static_cast 显式完成。

dynamic_cast
dynamic_cast 支持运行时识别指针或引用所指向的对象。

const_cast
//应用:比如一个函数接受char*,但是只读不写,希望也能够接受const char* 类型,但是不能修改函数
const char* p1="1111";
char* p2=const_cast<char*>(p1); //p2和p1实际内容一样,虽然不是const,但是修改会出错


reinterpret_cast
通常为操作数的位模式提供较低层次的重新解释。 就是和int a=(int)b一样的效果,可以任意转换,但不保证安全,如果有错误要在运行时才能产生

posted @ 2012-12-14 10:27  Bug山Bug海  阅读(892)  评论(0编辑  收藏  举报