cppcoreguidelines-pro-type-member-init¶
此检查标记用户提供的构造函数定义,这些定义没有初始化所有在默认构造期间会处于未定义状态的字段,例如,内建类型、指针和没有用户提供的默认构造函数的记录类型,其中至少包含一种此类类型。如果这些字段没有被初始化,构造函数将使某些内存处于未定义状态。
对于 C++11,它建议修复以添加类内字段初始化器。对于旧版本,它将字段初始化器插入构造函数初始化列表。它还将在构造函数初始化列表中初始化需要归零的任何直接基类。
该检查将考虑构造函数体中的字段赋值,但会针对在构造函数体中调用的方法中初始化的字段生成误报。
该检查还标记具有自动存储期限且具有没有用户提供的构造函数的记录类型的变量,并且没有被初始化。建议的修复方法是使用 {}
(C++11 及更高版本) 或 = {}
(旧语言版本) 初始化变量。
选项¶
- IgnoreArrays¶
如果设置为 true,则检查将不会警告在构造期间未被零初始化的数组成员。对于性能关键代码,可能需要避免初始化固定大小的数组成员。默认值为 false。
- UseAssignment¶
如果设置为 true,则检查将提供带有文字初始化器(
int i = 0;
)而不是大括号(int i{};
)的修复建议。
此规则是 C++ 核心准则中 类型安全 (Type.6) 概要的一部分。