显然,指定的初始化程序不是“正确”的C ++。 有其他选择吗?
我喜欢将其用于结构,因为:
谢谢 耶尔
答案 0 :(得分:1)
给予
struct S {
int x, y, z;
}:
S s {
.y = 1; // not standard until C++20
};
有其他选择吗?
您可以使用位置列表初始化:
S s{0, 1};
成员名称不是显式的,这有一个缺点(可以说是有好处的,取决于情况),这取决于成员的顺序,并且最后一个显式初始化之前的所有成员也必须存在。
另一种选择:稍后分配成员。
S s{};
s.y = 1;
这具有不能用于初始化const成员的缺点。另一个缺点是这不是单个初始化表达式。可以使用以下函数解决此问题:
S init(int y) {
S s{};
s.y = y;
return s;
}
S s = init(1);
另一种选择:使用构造函数。
struct S {
int x = 0, y = 0, z = 0;
S(int y): y(y) {}
};
在某些情况下,这可能要简单得多,但在其他情况下,则根本不清楚(例如,类似于矢量的情况)。另一个缺点是缺少琐碎的构造函数。