我在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 ......
答案 0 :(得分:3)
我认为我的编译器会自动将变量
a
和b
设置为0 ......
这是事实。这种初始化称为聚合初始化,在您的情况下,它将它们初始化为零。
就个人而言,我讨厌这个警告,因为我发现它很烦人并且总是把它关掉。我想如果你希望编译器在你的类中添加一个成员并且忘记初始化它时发出警告就很有用。当然,编译器无法读懂您的想法并且看到您故意不初始化它们,因为您希望它们为零。
所以,忽略并继续前进:)。