警告:非静态数据成员初始值设定项 - c ++

use*_*252 3 c++ static

我用c ++编写了以下程序,得到了一个编译警告:

 warning: non-static data member initializers only available with -std=c++11 or -std=gnu++11 [enabled by default]
Run Code Online (Sandbox Code Playgroud)

这是什么意思?

 struct struct1 {
   int i = 10;
 };

 int main() {
   struct1 s1;
   cout << s1.i;
   return 0;

 }
Run Code Online (Sandbox Code Playgroud)

Ide*_*Hat 6

静态数据初始值设定项是在类的范围之外完成的初始值设定项.在这种情况下,它指的是您使用的内联初始化int i = 10;.但是,如果您这样做,此代码也不会喜欢它:

struct struct1 {
    int i;
};
int struct1::i=10;
Run Code Online (Sandbox Code Playgroud)

在这种情况下,您正在初始化i,好像所有人都struct1共享i,但他们每个人都有自己的共享.

在旧版本的C++中,解决此问题的唯一方法是初始化构造函数中的值:

struct struct1 {
    int i;
    struct1(): i(10) {}
};
Run Code Online (Sandbox Code Playgroud)

在C++ 11中,标准委员会决定允许人们按照你想要的方式初始化值,大概是为了避免这种混乱(尽管我并不知道这些事情).