gpt4 book ai didi

c++ - 我应该担心 C++17 中的 Wmissing-field-initializers 和聚合初始化吗?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:26:29 26 4
gpt4 key购买 nike

我使用启用了 -Wall-Wextra 的 GCC 编译了一些代码。此代码会产生警告:

struct A { A(int) {} };
struct B {};

struct C : A, B {};

int main() {
(void) C{1};
}
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::AC::B

你只初始化了一个。

当然可以,B 实际上没有任何要初始化的东西。但是对于-Wall来说,和这个没什么区别:

struct C
{
A a;
B b;
};

(void) C{1};

这也会给出警告。在任何一种情况下,您都可以通过为 B 提供显式初始化程序来使其静音:(void)C{1, {}};

但就标准而言,这是完全有效的代码。 B 将被值初始化。无论哪种情况。

关于c++ - 我应该担心 C++17 中的 Wmissing-field-initializers 和聚合初始化吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47736299/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com