我用 C++ 编写了以下程序并得到了编译警告:
warning: non-static data member initializers only available with -std=c++11 or -std=gnu++11 [enabled by default]
这是什么意思?
struct struct1 {
int i = 10;
};
int main() {
struct1 s1;
cout << s1.i;
return 0;
}
最佳答案
静态数据初始化器是在类范围之外完成的初始化器。在本例中,它指的是您使用 int i = 10;
进行的内联初始化。但是,如果您这样做,这段代码也不会喜欢它:
struct struct1 {
int i;
};
int struct1::i=10;
在这种情况下,您正在初始化 i
,就像所有 struct1
的共享 i
一样,但它们每个都有自己的。
在旧版本的 C++ 中,解决此问题的唯一方法是在构造函数中初始化值:
struct struct1 {
int i;
struct1(): i(10) {}
};
在 C++11 中,标准委员会决定允许人们以您想要的方式初始化值,大概是为了避免这种混淆(尽管我不知道这些事情)。
关于c++ - 警告 : non-static data member initializers - c++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22940097/