modernize-use-designated-initializers

查找聚合类型的初始化列表,这些列表可以用指定初始化器来编写。

对于普通初始化列表,在结构体或类类型中添加新字段时,很容易引入错误。更改字段顺序时也会出现同样的混淆。

C++20 支持聚合类型的指定初始化器语法。通过应用它,我们可以始终确保聚合体被正确构造,因为每个被初始化的变量都通过其名称进行引用。

示例

struct S { int i, j; };

是一个应该初始化为

S s{.i = 1, .j = 2};

而不是

S s{1, 2};

ijS 的声明中交换时,这很容易成为问题。

即使在使用比 C++20 更旧的语言版本进行编译时,根据您的编译器,指定初始化器也可能得到支持。因此,默认情况下,该检查仅限于 C99/C++20 及更高版本。查看选项 -Wc99-designator 以获得在 C 中的初始化列表中支持混合指定器,以及 -Wc++20-designator 以在更旧的 C++ 语言模式中支持指定初始化器。

选项

IgnoreMacros

false 指定从宏展开的初始化列表的组件不被检查。默认值为 true

IgnoreSingleElementAggregates

false 指定即使是仅包含单个元素的聚合类型的初始化器也应该被检查。默认值为 true

RestrictToPODTypes

true 指定只有普通数据 (POD) 类型会被检查。这使得该检查适用于更旧的 C++ 标准。默认值为 false

StrictCStandardCompliance

当设置为 false 时,该检查不会将自身限制为 C99 及更高版本。默认值为 true

StrictCppStandardCompliance

当设置为 false 时,该检查不会将自身限制为 C++20 及更高版本。默认值为 true