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

Wiz*_*ann 7 c++

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

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

  1. 只有当所有班级成员都是公开的时候才能使用它.

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

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

我不知道为什么显式初始化列表更容易失败."编译器自动应用"的含义是什么?

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

感谢您的回答.

Rod*_*ddy 4

这是 Lipmann 书中的显式初始化列表的示例。

Point1 local1 = { 1.0, 1.0, 1.0 };
Run Code Online (Sandbox Code Playgroud)

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

Point local2;
Run Code Online (Sandbox Code Playgroud)

...那么你“无法初始化对象”。这并不是说初始化列表可能会以任何方式失败,只是您可能忘记使用它。

与构造函数比较

Point::Point (int x=0, int y=0, int z=0) : x(x), y(y) z(z) {};
Run Code Online (Sandbox Code Playgroud)

您现在可以同时执行这两项操作,并且仍然可以获得明确的结果。

 Point local3(1.0, 1.0, 1.0);
 Point local4; // uses default values of 0,0,0
Run Code Online (Sandbox Code Playgroud)