modernize-use-designated-initializers¶
查找聚合类型的初始化列表,这些列表可以用指定初始化器来编写。
对于普通初始化列表,在结构体或类类型中添加新字段时,很容易引入错误。更改字段顺序时也会出现同样的混淆。
C++20 支持聚合类型的指定初始化器语法。通过应用它,我们可以始终确保聚合体被正确构造,因为每个被初始化的变量都通过其名称进行引用。
示例
struct S { int i, j; };
是一个应该初始化为
S s{.i = 1, .j = 2};
而不是
S s{1, 2};
当 i
和 j
在 S
的声明中交换时,这很容易成为问题。
即使在使用比 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。