我正在阅读斯坦利·利普曼(Stanley Lipmann)编写的C++入门手册第4版,我在第92页上介绍了值初始化。

我只是不了解何时进行值(value)初始化。我四处浏览,我知道还有默认初始化和零初始化。谁能解释一下值(value)初始化?

来到本段..

第a)条



我确实理解上面的内容,但是我发现下面的内容与上面的句子矛盾。

b)条



我不明白b条。

任何帮助表示赞赏

最佳答案

a)如果该类定义了其他构造函数,那么这是正确的-从而抑制了默认构造函数的生成。

struct Foo {
  Foo(int n) : mem(n) {}
  int mem;
};

此类无法进行值初始化。

b)如果该类未定义构造函数,则值初始化将简单地对所有子对象(基类和非静态成员)进行值初始化。
struct Foo {
  Foo() : mem(0) {}
  int mem;
};

struct Bar {
  Foo f;
};
Bar的值初始化只是意味着f成员将被值初始化。

参见例如What do the following phrases mean in C++: zero-, default- and value-initialization?

07-24 09:45
查看更多