- c++提供的新的不同于c的转型方式:
const_cast<T>(expression);//const->non const
dynamic_cast<T>(expression);
reinterpret_cast<T>(expression);//不可移植,不常用
static_cast<T>(expression);
不建议使用c类的旧式转型。
对象的布局方式和它们的地址计算方式随编译器的不同而不同,那意味着“由于知道对象如何布局”而设计的转型,在某一平台行得通,在其他平台并不一定行得通。
要特别注意c++中的多继承中的转型动作。
AB *ab = new AB(10, 20);//AB 派生自A,B
A* a = ab;
B* b = ab;
- tips:
- 如果可以,尽量避免转型,特别是在注重效率的代码中避免dynamic_casts(深度继承)。如果有个设计需要转型动作,试着发展无需转型的替代设计。
- 如果转型是必要的,试着将它隐藏于某个函数背后。客户随后可以调用该函数,而不需将转型放进他们的代码中。
- 尽量使用c++的新式转型,不要使用旧式转型。前者很容易辨别出来,而且也比较有着分门别类的作用。