c++ - 警告 : non-static data member initializers - c++

标签 c++ static

我用 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/

相关文章:

Django - 如何在共享主机上设置单独的媒体/静态服务器?

c++ - 读取位图文件

c++ - std::is_function 的实现 - 为什么我的实现表现不同?

C++ 错误 - '.' 标记之前预期的主表达式|结构上

.net - 如何在应用程序启动和关闭时自动在静态类中调用方法?

java - 我们可以从静态方法访问/调用无状态 session Bean 吗?

C++ 使用 cppcheck 建议的显式

c++ - 为什么 §12.2/5 中的第二个要点被视为本段中明确规定的异常(exception)情况?

c - 将 malloc 与静态指针一起使用

JavaParser提取注释参数值