我用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中,标准委员会决定允许人们以您想要的方式来初始化值,大概是为了避免这种困惑(尽管我并不喜欢这种事情)。

09-12 06:26