这些问题在论坛中得到的关注太少.
之前有人问过,但没有人抓住这个小细节.结果我不确定我做的是否正确:
简单的例子:
struct TEST {
bool a;
int b;
};
TEST func() {
return { false };
}
Run Code Online (Sandbox Code Playgroud)
它是否正确?请注意,int值未初始化.虽然将其设置为0不会有问题,但会出现更多问题:
struct _FILE_MUTEX {
bool locked;
HANDLE handle;
};
Run Code Online (Sandbox Code Playgroud)
从向量,数组到函数指针,结构的最后一个成员可能变得越来越复杂.
返回内联初始化结构时,我可以将一些成员留空吗?
这称为聚合初始化.
https://en.cppreference.com/w/cpp/language/aggregate_initialization
如果初始化条款的数目小于成员的数量(因为C++ 17)和碱或初始化列表完全是空的,其余成员和碱(因为C++ 17)被初始化可以通过默认成员初始化,如果根据通常的列表初始化规则(使用默认构造函数对非类类型和非聚合类执行值初始化,以及聚合),在类定义中提供,以及以其他方式(从C++ 14开始)按空列表提供聚合的初始化).如果引用类型的成员是其余成员之一,则该程序格式错误.
因此,在聚合初始化中,您允许提供比结构中的成员更少的子句.没有默认初始值设定项的每个剩余成员(例如X)将初始化为X {}.