代码之家  ›  专栏  ›  技术社区  ›  klaus

结构内缺少初始值设定项的警告[关闭]

c++
  •  0
  • klaus  · 技术社区  · 8 年前

    我有以下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{};
                  ^
    

    我想我的编译器会自动设置变量 a b 到0。。。

    1 回复  |  直到 8 年前
        1
  •  3
  •   Rakete1111    8 年前

    我想我的编译器会自动设置变量 a b 到0。。。

    这是真的。这种初始化称为聚合初始化,在您的情况下,它将它们初始化为零。

    就我个人而言,我讨厌这个警告,因为我觉得它很烦人,总是把它关掉。如果您想让编译器在向类中添加成员而忘记初始化时发出警告,我想这会很有用。当然,编译器无法读懂您的想法,并看到您故意没有初始化它们,因为您希望它们为零。

    因此,请忽略并继续:)。