【发布时间】:2013-01-29 08:40:42
【问题描述】:
以下代码在 gcc-4.7.1 和 clang-3.2 下都不能使用 -std=c++11 编译。所以我觉得我做错了什么。但我不知道为什么。有人可以给我一个提示吗?基本上,如果我删除 X 的类内成员初始化程序,它就可以工作。那么为什么初始化器列表不能与类内成员初始化器一起使用呢?
struct X {
int x = 1;
int y = 1;
};
int main() {
X x = {1, 2};
}
gcc 编译错误:
a.cpp: In function 'int main()':
a.cpp:7:16: error: could not convert '{1, 2}' from '<brace-enclosed initializer list>' to 'X'
【问题讨论】:
-
@IvayloStrandjev,正如我提到的,是的。
-
会员声明中的
= 1;总是让人重复。 -
问题是当你有初始化器时,它形成了
X() : x{1}, y{1} {}的等价物,我敢打赌这就是聚合初始化不起作用的原因。 -
@chris 我只是在想同样的事情。使用此类类内初始化程序时,可能会出现带有预构建初始化程序列表的默认构造函数。
-
@chris 你又是对的。
X不是聚合,根据 8.5.1。请参阅对我的答案的编辑。