尽量用C++的新式cast,而不是C的旧式cast
来源:互联网 发布:云计算国外研究现状 编辑:程序博客网 时间:2024/06/05 17:23
1. C++的cast精准,而C的cast模糊
类型转换是经常出问题的地方,需要小心运用,尽量避免模糊的语义。
l C式的cast,形似type(…),与非cast形式的构造函数调用相同,不易区别。
l 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.
l C++的cast提供了四种类型的转换运算符,可以根据具体的需要选择,并且可以精准地描述调用者的意图。比如const_cast就是为了去掉const或者volatile修饰符,dynamic_cast就是为了向下安全转换,static_cast为了替换原来的隐式转换;reinterpret_cast就是为了在不相关的类型间转换(包括不同类型的函数指针)。
2. dynamic_cast的限制
l 仅在运行时cast。
l 仅应用于指针和引用的cast。
l 仅应用于拥有多态的对象。
3. reinterpret_cast的使用注意事项
l reinterpret_cast可以在不相关的指针类型间转换。【static_cast不能做到。】
l reinterpret_cast通常用以转换函数指针的类型。【static_cast不能做到。】
l 转换函数指针的结果可能不正确,而且各个编译器的实现未必相同,所以reinterpret_cast转换函数指针不能在平台间移植。
- 尽量用C++的新式cast,而不是C的旧式cast
- C旧式与新式函数的声明与定义
- [C++] 关于C++的cast
- c指针的强制转换(cast)
- python2.x的新式旧式类问题
- c语言 cast operator
- static_cast,dynamic_cast,reinterpret_cast const_cast于c语言cast的区别
- C和C++语言的强制类型转换 Type Cast
- Python新式类和旧式类的区别
- Python新式类和旧式类的区别
- Python新式类与经典类(旧式类)的区别
- Python新式类与经典类(旧式类)的区别
- C++ cast 总结
- C++ - Cast的对比
- hibernate 的cast函数
- oracle cast 的用法
- 关于Cast<>的用法
- tf.cast的使用
- ASP.NET中的DES加密解密,可用于URL传参
- 用JAVA程序取得IP地址
- 利用Java实现网络通信
- CSDN又调整BLOG的管理界面了,真有点不适应
- 用 Java 保存位图文件
- 尽量用C++的新式cast,而不是C的旧式cast
- 错误的堆大小产生的 "堆问题"
- 二叉树的深度
- Enterprise JavaBeans 入门 实体 Bean 和 CMP
- [转载]我该使用何种语言(开发游戏)
- 英文版吻别 - take me to your heart
- Java 应用程序中的按值传递语义
- 使用 JDBC 创建数据库对象 1
- Java建立Zip压缩文件