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

What do curly braces after a struct variable member mean?

本文关键字:是什么 意思 变量 成员 结构      更新时间:2024-04-28

在一些维护(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{}组成的初始值设定项声明命名变量(自动、静态或线程本地(时,将执行值初始化。

值初始化的效果是对象初始化为零。