芝士wa
2024.4.8
转型语法
C风格的语法:
(T)expression 或者 T(expression),意味着将expression转型为T
C++提供了四种新的转型方法:
const_cast
dynamic_cast
reinterpret_cast
static_cast
各有不同的目的:
- const_cast通常被用来将对象的常量性转除,它也是唯一有此能力的C++转型操作符。
- dynamic_cast组要用来执行“安全向下转型”,也就是用来决定某对象是否归属继承体系中的某个类型。它是唯一无法由旧式语法执行的动作,也是唯一可能耗费重大运行成本的转型操作
- reinterpret_cast意图执行低级转型,实际动作可能取决于编译器,这也就表示它不可移植。假如将一个pointer to int转型为一个int。少见。
- static_cast用来强迫隐式转换,加入将non-const对象转换为const对象,或将int转换成double。
- 如果可以,尽量避免转型,特别是在注重效率的代码中避免dynamic_cast
- 尽量使用虚函数实现多态,而不是用dynamic_cast
- 如果转型是必要的。试着将它隐藏于某个函数背后
- 宁可使用C++新式转型,不要使用旧式转型