C++11:列表初始化如何在用户定义的对象中赋值?

C++11: how List-initialization assign values in a user defined object?

我有一个 class 图书馆,它包含来自另一个 class 书架的成员对象 shelf1。

Class 货架有几个变量,比如说:

class Shelf {
int height;
int width;
int materialType;
String shelfName;
}

现在在Library中,我想在Library声明中初始化成员对象shelf1:

Shelf shelf1{100, 200};
Shelf shelf2{100, "fiction"};

它们可以工作吗?列表初始化如何处理变量的顺序?

[更新] 这些代码是为了解释我的问题(我在现实世界中确实有类似的代码。但是放在这里太复杂了。所以我简化了我的问题)。

如果你的 class 是一个 aggregate,那么变量会根据你的 class 中声明的顺序进行初始化。为了让你的 class 成为一个聚合(并且能够使用这样的直接列表初始化),其中一个要求是所有成员都必须是 public (感谢@Praetorian 抓住了这个),否则你的class 不是聚合,代码无法编译。 所以,假设成员是public

Shelf shelf1{100, 200}; 

100初始化height,用200初始化width

Shelf shelf2{100, "fiction"};

是编译时错误,因为第二个成员 width 不是 C 字符串。

更多详情here