条款27:尽量少做转型动作

  1. c++提供的新的不同于c的转型方式:
const_cast(expression);//const->non const
dynamic_cast(expression);
reinterpret_cast(expression);//不可移植,不常用
static_cast(expression);
  1. 不建议使用c类的旧式转型。

  2. 对象的布局方式和它们的地址计算方式随编译器的不同而不同,那意味着“由于知道对象如何布局”而设计的转型,在某一平台行得通,在其他平台并不一定行得通。

  3. 要特别注意c++中的多继承中的转型动作。

    AB *ab = new AB(10, 20);//AB 派生自A,B
    A* a = ab;
    B* b = ab;
  1. tips:
    • 如果可以,尽量避免转型,特别是在注重效率的代码中避免dynamic_casts(深度继承)。如果有个设计需要转型动作,试着发展无需转型的替代设计。
    • 如果转型是必要的,试着将它隐藏于某个函数背后。客户随后可以调用该函数,而不需将转型放进他们的代码中。
    • 尽量使用c++的新式转型,不要使用旧式转型。前者很容易辨别出来,而且也比较有着分门别类的作用。

你可能感兴趣的:(条款27:尽量少做转型动作)