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

Is there a more maintainable way to initialize structs?

假设您有这样的结构:

struct Foo {
   int a;
};

目前我是这样初始化的:

Foo foo = {1};

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

struct Foo {
   int a;
   int b;
}

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

您正在使用 aggregate initialization, whose behaviour is built in to the language and cannot be changed. Aggregate initialization will allow you to leave some members uninitialized. However, you can tell GCC and Clang to issue a warning using -Wmissing-field-initializers。您也可以使用 -Werror=missing-field-initializers.

将其转换为错误

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

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) {}
};

那么你又会遇到问题。但是也可以让编译器警告您这一点。