C++中 , 除了可以使用C风格的强制转换外 , 还另外定义了 四个用于强制转换的关键字
dynamic_cast static_cast const_cast reinterpret_cast (注:reinterpret : 重新解释)
dynamic_cast 用于运行时识别 指针或 引用指向的对象
static_cast 类似于C中的强制类型转换 , 可以将较大的 算数类型赋值给较小的算数类型 , 也可以用于 编译器不提供自动转换时 类型的强制转换
(隐式转换就是使用static_cast 实现的)
const_cast 添加或删除 类型的 const 属性
例:
1 char a[] = {"hahahahahahahha"}; 2 const char *p = a; 3 char *cp; 4 cp = p; 5 *cp = 'n'; 6 cout<<cp<<endl;
//当不用转换直接 将 const char* 转换为 char* 时
//会报错 : error C2440: '=' : cannot convert from 'const char *' to 'char *'
1 char a[] = {"hahahahahahahha"}; 2 const char *p = a; 3 char *cp; 4 cp = const_cast<char*>(p); 5 cp = p; 6 *cp = 'n'; 7 cout<<cp<<endl;
//转换以后, 删除了 const 属性 , 就可以修改了
要注意,此处使用 C风格的强制类型转换时行不通的 , 照样会报错 : cannot convert from 'const char *' to 'char *'
也可以通过 const_cast<const char*> 来添加const属性
另外要注意的是 , const_cast 只能用于 添加或删除 const 属性 , 用于其它任何地方都是错误的 添加或删除const属性的操作也只能用const_cast进行
reinterpret_cast 用于对变量类型的重新解释 功能基本等同于 C 风格的强制类型转换