条款27:尽量少做转型动作
来源:互联网 发布:javascript 教程 知乎 编辑:程序博客网 时间:2024/05/04 17:04
C++中的转型语法包括旧式转型和新式转型。
旧式转换包括:
(T) expression //将expression转型为T,C风格的转型动作
T(expression) //将expression转型为T,函数风格的转型动作
新式转型包括:
const_cast<T>(expression)
const_cast通常被用来将对象的常量性转除,也是唯一有此能力的新式转型操作符。
dynamic_cast<T>(expression)
dynamic_cast主要用来执行“安全向下转型”,也就是用来决定某对象是否归属继承体系中的某个类型。它是唯一无法由旧式语法执行的动作,也是唯一可能耗费重大运行成本的转型动作。
reinterpret_cast<T>(expression)reinterpret_cast意图执行低级转型,实际动作(及结果)可能取决于编译器,这也就表示它不可移植。
static_cast<T>(expression)static_cast用来强迫隐式转换。
结论1:如果可以,尽量避免转型,特别是在注重效率的代码中避免dynamic_casts。之所以需要dynamic_cast,通常是因为想在一个认定为derived class对象身上执行derived class操作函数,但手上却只有一个"指向base"的pointer或reference。如果有个设计需要转型动作,试着发展无需转型的替代设计。
可行的dynamic_cast替代方案包括“使用类型安全容器”或“将virtual函数往继承体系上方移动”。
结论2:如果转型是必要的,试着将它隐藏于某个函数背后。客户随后可以调用该函数,而不需将转型放进他们自己的代码内。
结论3:宁可使用C++-style(新式)转型,不要使用旧式转型。新式转型很容易辨识出来,而且也比较有着分门别类的功能。
0 0
- 条款27:尽量少做转型动作
- 条款27:尽量少做转型动作
- 条款27:尽量少做转型动作
- 条款27:尽量少做转型动作
- 条款27:尽量少做转型动作
- 条款27:尽量少做转型动作
- 条款27 尽量少做转型动作
- 条款27 尽量少做转型动作
- 条款27尽量少做转型动作
- Effective C++:条款27:尽量少做转型动作
- 《Effect C++》学习------条款27:尽量少做转型动作
- 【Effection C++】读书笔记 条款27:尽量少做转型动作
- 读书笔记《Effective C++》条款27:尽量少做转型动作
- 条款27: 尽量少做转型操作
- 条款27:尽量少做转型操作
- 条款27:尽量少做转型操作
- 尽量少做转型动作
- 《Effective C++》学习笔记条款27 尽量少做转型动作
- 拦截导弹
- 英语学习方法
- 求大神指导
- hdoop
- 推荐一款不错的eclipse properties编辑插件
- 条款27:尽量少做转型动作
- python开发环境eclipse+pydev搭建
- C编程中scanf函数遇到的问题
- JS中的原型
- Java基础学习笔记及心得——数据库系列之一,数据库基本概念
- mysql uuid以及gtid
- 第五周作业——有向图邻接表表示及反向图构造
- sql 多表查询 统计无记录缺考--- 经典面试题
- GF[2^n]下的多项式除法