在“Inside the C ++ object model”一书中,作者说:
显式初始化列表有三个缺点:
只有在所有班级成员都公开的情况下才能使用。
- 醇>
它只能指定常量表达式(能够在编译时评估的表达式)。
第3。因为它不是由编译器自动应用的,所以初始化对象失败的可能性显着提高。
我不知道为什么显式初始化列表更有可能失败。 “编译器自动应用”是什么意思?
是否有一些例子来证明这一观点。
感谢您的回答。
答案 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