读书人

C++类型转换的一些基本有关问题有关问

发布时间: 2013-09-10 13:42:18 作者: rapoo

C++类型转换的一些基本问题问题
以前一直都没怎么注意,都是C方式转换的,比如:

int a = (int)flaot_number;
int b = (int)point;
ClassA* ptr = (ClassA*)ptr_of_ClassB;

因为代码主要都是自己写的,所以安不安全全看我记不记得清楚类型之间的关系(尤其是Class类型)
后来发现C++提供了好几种类型转换符
我主要想弄明白的是 static_cast 和 reinterpret_cast

网上搜了下,static_cast 说是不提供运行时类型检查(所以安全要靠程序员自己保证?)
那么 假如我定义了两个不相干类 ClassA 和 ClassB
如果我要这样做
ClassA* ptrA = new ClassA();
ClassB* ptrB = static_cast<ClassB*>(ptrA);
编译器会不会报错?

还有就是reinterpret_cast说是可以任意转换?
那和传统的C方式转换有什么区别?相比之下优点在哪里?

谢谢
[解决办法]
俩个无关的类不能用static_cast转换。
static_cast用于本来就可以隐式转换的类型,比如 int 和 double之间,基类指针和派生类指针之间
static_cast 不提供运行时类型检查 ,主要是指基类指针引用向派生类指针引用转换的时候不检查。(需要检查用dynamic_cast)

reinterpret_cast也有限制,比如不能删除const属性(必须用const_cast),不能把指针类型转换成字节数更短的类型(short,char等),不能在函数指针和数据指针之间互相转换等。

读书人网 >C++

热点推荐