c ++值初始化

yap*_*m01 10 c++ initialization

我正在阅读Stanley Lipmann撰写的c ++ primer第4版,我在第92页关于值初始化.

关于价值初始化,我只是不明白.我浏览了一下,我知道还有默认的初始化和零初始化.任何人都可以解释价值初始化吗?

来到这一段..

第a)条

"有些类没有定义默认构造函数.我们不能通过只指定一个大小来初始化这种类型的向量,我们还必须指定一个初始值"

我确实理解了上述内容,但我发现下面与上述句子相矛盾.

第b)条

"元素类型可能是一个没有定义任何构造函数的类类型.在这种情况下,库仍然会创建一个初始化值的对象.它是通过初始化该对象的每个成员来实现的."

我不明白条款b.

任何帮助表示赞赏

Eri*_*rik 8

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

struct Foo {
  Foo(int n) : mem(n) {}
  int mem;
};
Run Code Online (Sandbox Code Playgroud)

此类不能进行值初始化.

b)如果类没有定义构造函数,则value-initialization将简单地初始化所有子对象(基类和非静态成员)

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

struct Bar {
  Foo f;
};
Run Code Online (Sandbox Code Playgroud)

值初始化Bar只是意味着f成员将进行值初始化.

请参阅例如以下短语在C++中的含义:零,默认和值初始化?