• 欢迎光临~

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

开发技术 开发技术 2022-11-20 次浏览
  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会包含多个地址,比如它的所有基类对应的地址。
程序员灯塔
转载请注明原文链接:Effective C++ - 条款27 - 尽量少做转型动作
喜欢 (0)
违法和不良信息举报电话:022-22558618 举报邮箱:dljd@tidljd.com