使用未初始化的成员返回内联定义的结构.C++

ser*_*ncu 2 c++ struct c++17

这些问题在论坛中得到的关注太少.

之前有人问过,但没有人抓住这个小细节.结果我不确定我做的是否正确:

简单的例子:

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)

从向量,数组到函数指针,结构的最后一个成员可能变得越来越复杂.

返回内联初始化结构时,我可以将一些成员留空吗?

Dan*_* Z. 9

这称为聚合初始化.

https://en.cppreference.com/w/cpp/language/aggregate_initialization

如果初始化条款的数目小于成员的数量(因为C++ 17)和碱或初始化列表完全是空的,其余成员和碱(因为C++ 17)被初始化可以通过默认成员初始化,如果根据通常的列表初始化规则(使用默认构造函数对非类类型和非聚合类执行值初始化,以及聚合),在类定义中提供,以及以其他方式(从C++ 14开始)按空列表提供聚合的初始化).如果引用类型的成员是其余成员之一,则该程序格式错误.

因此,在聚合初始化中,您允许提供比结构中的成员更少的子句.没有默认初始值设定项的每个剩余成员(例如X)将初始化为X {}.