gpt4 book ai didi

c++ - 有没有更易于维护的方法来初始化结构?

转载 作者:太空宇宙 更新时间:2023-11-03 10:22:40 25 4
gpt4 key购买 nike

假设您有一个这样的结构:

struct Foo {
int a;
};

目前我正在这样初始化它:

Foo foo = {1};

现在,如果我添加另一个成员:

struct Foo {
int a;
int b;
}

代码仍然可以编译,编译器认为初始化完全没问题。但是我希望编译器在我向结构中添加新成员时产生错误。可能吗?

最佳答案

您正在使用 aggregate initialization ,其行为内置于语言中,无法更改。聚合初始化将允许您保留一些未初始化的成员。但是,您可以使用 -Wmissing-field-initializers 告诉 GCC 和 Clang 发出警告.您还可以使用 -Werror=missing-field-initializers 将其转换为错误。

您还可以通过使您的类不是聚合来禁止语言本身的聚合初始化,而是强制用户使用您声明的构造函数:

struct Foo {
int a;
int b;
Foo(int a, int b) : a(a), b(b) {}
};

现在 Foo foo = {1}; 将无法编译,因为聚合初始化不适用于此处,并且构造函数的参数不足。

但是,请记住,如果您声明的构造函数无法初始化所有成员,例如,您无意中写了这样的东西:

struct Foo {
int a;
int b;
Foo(int a, int b) : a(a) {}
};

然后你又会遇到问题。但是也可以让编译器就此警告您。

关于c++ - 有没有更易于维护的方法来初始化结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57716523/

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