Effective C++ - 条款27 - 尽量少做转型动作

  1. 旧式C转型: T(expression)/(T)expression
  2. 新式C++转型:static_cast/dynamic_cast/const_cast/reinterpret_cast
  3. 只能通过const_cast去掉const
  4. dynamic_cast成本很高,很多编译器的实现都是用了字符串比较,所以尽量别用。可以通过虚函数来实现相同效果。dynamic_cast实现的是向下转型,比如将base class对象转为derived class对象。
  5. static_cast在使用时,如果是为了将derived class对象转型为base class,会有危险,因为转型后会得到derived class对象中base class部分的副本,而不是这个对象中base class部分本身,所以期望对这个base class部分本身做的修改不会生效。
  6. 将转型动作理解为告诉编译器把某种类型视为另一种类型是错误的。例如将int转为double时,这两种类型的底层表述有区别,所以不是简单的将int视为double。再如将derived对象转型为base,derived会包含多个地址,比如它的所有基类对应的地址。
posted @ 2022-11-20 11:18  ijpq  阅读(13)  评论(0编辑  收藏  举报