Item27:尽量少做转型动作

芝士wa
2024.4.8


转型语法

C风格的语法:

(T)expression 或者 T(expression),意味着将expression转型为T

C++提供了四种新的转型方法:

const_cast(expression)
dynamic_cast(expression)
reinterpret_cast(expression)
static_cast(expression)

各有不同的目的:

  • const_cast通常被用来将对象的常量性转除,它也是唯一有此能力的C++转型操作符。
  • dynamic_cast组要用来执行“安全向下转型”,也就是用来决定某对象是否归属继承体系中的某个类型。它是唯一无法由旧式语法执行的动作,也是唯一可能耗费重大运行成本的转型操作
  • reinterpret_cast意图执行低级转型,实际动作可能取决于编译器,这也就表示它不可移植。假如将一个pointer to int转型为一个int。少见。
  • static_cast用来强迫隐式转换,加入将non-const对象转换为const对象,或将int转换成double。


  • 如果可以,尽量避免转型,特别是在注重效率的代码中避免dynamic_cast
  • 尽量使用虚函数实现多态,而不是用dynamic_cast
  • 如果转型是必要的。试着将它隐藏于某个函数背后
  • 宁可使用C++新式转型,不要使用旧式转型
posted @ 2024-04-08 15:46  芝士wa  阅读(12)  评论(0)    收藏  举报