为什么显式初始化列表更容易失败?

时间:2014-06-06 13:45:48

标签: c++

“Inside the C ++ object model”一书中,作者说:

  

显式初始化列表有三个缺点:

     
      
  1. 只有在所有班级成员都公开的情况下才能使用。

  2.   
  3. 它只能指定常量表达式(能够在编译时评估的表达式)。

  4.         

    第3。因为它不是由编译器自动应用的,所以初始化对象失败的可能性显着提高。

我不知道为什么显式初始化列表更有可能失败。 “编译器自动应用”是什么意思?

是否有一些例子来证明这一观点。

感谢您的回答。

1 个答案:

答案 0 :(得分:4)

以下是Lipmann小册子中显式初始化列表的示例。

Point1 local1 = { 1.0, 1.0, 1.0 };

认为他想要做的是你必须记住使用显式初始化!换句话说,它们不是构造函数的替代品。如果您忘记使用列表...

Point local2;

...然后你有"未能初始化对象"。并不是说初始化列表可能以任何方式失败,只是因为你可能记不起来使用它。

与构造函数比较

Point::Point (int x=0, int y=0, int z=0) : x(x), y(y) z(z) {};

您现在可以同时执行这两项操作,但仍可获得定义良好的结果。

 Point local3(1.0, 1.0, 1.0);
 Point local4; // uses default values of 0,0,0