C++:强制转换

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  风格的强制类型转换

原文地址:https://www.cnblogs.com/wowk/p/3127037.html