尽量用C++的新式cast,而不是C的旧式cast

来源:互联网 发布:云计算国外研究现状 编辑:程序博客网 时间:2024/06/05 17:23
 
1.         C++的cast精准,而C的cast模糊
类型转换是经常出问题的地方,需要小心运用,尽量避免模糊的语义。
C式的cast,形似type(…),与非cast形式的构造函数调用相同,不易区别。
C式的cast功能强大,甚至可以将const变量转换成非const的变量,而调用者却毫无察觉,非常危险。
const int a = 123;
int b = (int)a; //Danger
 
 // 旧式cast转换函数指针类型。
typedef (*VoidFun)();
int IntFun();
VoidFun vf = VoidFun(IntFun); // Syntax right, but DANGER.
C++的cast提供了四种类型的转换运算符,可以根据具体的需要选择,并且可以精准地描述调用者的意图。比如const_cast就是为了去掉const或者volatile修饰符,dynamic_cast就是为了向下安全转换,static_cast为了替换原来的隐式转换;reinterpret_cast就是为了在不相关的类型间转换(包括不同类型的函数指针)。
 
2.         dynamic_cast的限制
仅在运行时cast。
仅应用于指针和引用的cast。
仅应用于拥有多态的对象。
 
3.         reinterpret_cast的使用注意事项
reinterpret_cast可以在不相关的指针类型间转换。【static_cast不能做到。】
reinterpret_cast通常用以转换函数指针的类型。【static_cast不能做到。】
转换函数指针的结果可能不正确,而且各个编译器的实现未必相同,所以reinterpret_cast转换函数指针不能在平台间移植。
原创粉丝点击