作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
以下代码在 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'
最佳答案
通过在声明点初始化非静态数据成员,您的类不再是聚合(参见 8.5.1 聚合 [decl.init.aggr])。
解决方法是添加一个双参数构造函数。这允许您使用初始化列表初始化,它允许使用与聚合初始化相同的语法,即使您的类在技术上不是聚合。
struct X {
X(int x, int y) : x(x), y(y) {}
int x = 1;
int y = 1;
};
int main()
{
X x1{1, 2};
X x2 = {1,2};
}
注意:C++1y 放宽了这些规则,这意味着您的类型确实是聚合。
关于c++ - 如何让初始化列表和类成员初始化一起工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14578692/
我是一名优秀的程序员,十分优秀!