C ++ 11:List-initialization如何在用户定义的对象中赋值?

时间:2015-05-07 17:49:58

标签: c++ list-initialization

我有一个类库,它包含来自另一个类Shelf的成员对象shelf1。

Class Shelf有几个变量,比如说:

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

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

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

它们可以工作吗,列表初始化如何适用于变量的顺序?

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

1 个答案:

答案 0 :(得分:3)

如果您的班级是aggregate,则根据班级中的声明顺序初始化变量。要使您的类成为聚合(并且能够使用此类直接列表初始化),其中一个要求是所有成员必须是public(感谢@Praetorian才能捕获此内容),否则您的类不是聚合和代码不会编译。 因此,假设成员为public

Shelf shelf1{100, 200}; 

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

Shelf shelf2{100, "fiction"};

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

更多详情here