结构变量成员后的花括号是什么意思?

Giz*_*zmo 4 c++ initialization c++11

在一些维护(Valgrind'ing)期间,我遇到了这个代码:

#pragma pack(push, 1)
struct somename
{
  uint16_t a{};
  uint16_t b{};
  uint32_t  c{};
};
#pragma pack(pop)
Run Code Online (Sandbox Code Playgroud)

我希望{}告诉编译器始终将值初始化为 0(使用 new 或使用堆栈变量分配时),但我找不到任何示例或文档。我在这个假设中正确吗?如果不:

{}struct 成员变量后的花括号是什么意思?

son*_*yao 5

这是默认成员初始值设定项(C++11 起)。

(强调我的)

通过默认成员初始值设定项,它是包含在成员声明中的大括号或等号初始值设定项,并且在构造函数的成员初始值设定项列表中省略该成员时使用。

如果成员具有默认成员初始值设定项并且还出现在构造函数的成员初始化列表中,则该构造函数的默认成员初始值设定项将被忽略。

结果,数据成员a,bc值初始化(对于内置类型为零初始化)到0.