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