Gui*_*cot 6 c++ aggregate-initialization c++17
我用GCC编译了一些代码-Wall并-Wextra启用了.此代码生成警告:
struct A { A(int) {} };
struct B {};
struct C : A, B {};
int main() {
(void) C{1};
}
Run Code Online (Sandbox Code Playgroud)
Run Code Online (Sandbox Code Playgroud)main.cpp: In function 'int main()': main.cpp:11:15: warning: missing initializer for member 'C::<anonymous>' [-Wmissing-field-initializers] (void) C{1}; ^
我应该担心吗?这是GCC输出此警告的错误吗?似乎我没有要初始化的字段,也没有缺少参数.
C++ 17允许您对具有基类的类执行聚合初始化.每个基类都被有效地视为成员(它们位于类的直接成员之前).所以要聚合初始化,C有两个"成员":C::A和C::B.
你只初始化了一个.
哦,当然,B实际上没有任何东西可以初始化.但是-Wall,它与此没有什么不同:
struct C
{
A a;
B b;
};
(void) C{1};
Run Code Online (Sandbox Code Playgroud)
这也会发出警告.在任何一种情况下,你都可以通过为B:提供显式初始化器来使其静音(void)C{1, {}};.
但就标准而言,这是完全有效的代码.B将初始化值.在任一情况下.