警告在结构内缺少初始化器

Warning on missing initializer inside a structure

本文关键字:初始化 结构 警告      更新时间:2023-10-16

我在C 中具有以下代码:

#include <iostream>
#include <stdint.h>
class X {
  private:
   struct {
    uint32_t a;
    uint32_t b;
   } myStruct{};
};
int main() {
  X x;
}

当我想用GCC 4.8.2编译时,我有以下错误:

$ g++ -std=c++11 -Wall -Wextra -Wshadow -Wunused -Wunused-value -Wunused-variable -Wunused-parameter -Wunused-label -Wunused-function sample.cpp -o out
warning: missing initializer for member 'X::<anonymous struct>::a'
[-Wmissing-field-initializers]
   } myStruct{};
              ^
warning: missing initializer for member 'X::<anonymous struct>::b'
[-Wmissing-field-initializers]
   } myStruct{};
              ^

我认为我的编译器会自动将变量设置为ab为0 ...

我以为我的编译器会自动将变量设置为ab为0 ...

是真的。此初始化称为汇总初始化,在您的情况下,它将它们初始化为零。

就我个人而言,我讨厌此警告,因为我觉得它很烦人并始终将其关闭。我想如果您希望编译器在班级中添加成员而忘记初始化时,这将很有用。当然,编译器无法阅读您的想法,并且看到您故意没有初始化它们,因为您希望它们为零。

所以,忽略并继续前进:(。