繁体   English   中英

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

[英]What do curly braces after a struct variable member mean?

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

#pragma pack(push, 1)
struct somename
{
  uint16_t a{};
  uint16_t b{};
  uint32_t  c{};
};
#pragma pack(pop)

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

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

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

(强调我的)

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

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

结果,数据成员abc初始化值(内置类型 为零初始化)为0

这是 此处记录的零初始化(第二种情况):

所以所有值都设置为0。

文档

当使用由一对大括号T{}组成的初始化程序声明命名变量(自动、static 或线程本地)时,将执行值初始化。

值初始化的效果是object被零初始化。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM