C++的四种类型转换
作者:网络转载 发布时间:[ 2014/11/24 11:47:44 ] 推荐标签:C++ 派生类 软件开发
3.const_cast
用法:const_cast<type_id> (expression)
该运算符用来修改类型的const或volatile属性。除了const 或volatile修饰之外, type_id和expression的类型是一样的。
①常量指针被转化成非常量指针,并且仍然指向原来的对象;
②常量引用被转换成非常量引用,并且仍然指向原来的对象;
③常量对象被转换成非常量对象。
// const_cast
#include <iostream>
using namespace std;
void print (char * str)
{
cout << str << endl;
}
int main () {
const char * c = "sample text";
print ( const_cast<char *> (c) );
return 0;
}
输出结果是:
sample text
如果 print(c);则会报类型不兼容错误。
4、reinterpret_cast
reinterpret_cast是C++里的强制类型转换符。
操作符修改了操作数类型,但仅仅是重新解释了给出的对象的比特模型而没有进行二进制转换。 例如:
int *n= new int ;
double *d=reinterpret_cast<double*> (n);
在进行计算以后, d包含无用值.这是因为reinterpret_cast 仅仅是复制 n 的比特位到d, 没有进行必要的分析。
class A {};
class B {};
A * a = new A;
B * b = reinterpret_cast<B*>(a);
这个是合法的C++代码,虽然没多大意义,现在有一个指向一个互不相关对象的指针,因此这个非关联的指针是不安全。

sales@spasvo.com