首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

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

2013-09-10 
C++类型转换的一些基本问题问题以前一直都没怎么注意,都是C方式转换的,比如:int a (int)flaot_numberin

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等),不能在函数指针和数据指针之间互相转换等。

热点排行