performance-unnecessary-copy-initialization¶
查找使用非平凡可复制类型的复制构造函数进行初始化的局部变量声明,但获取 const 引用就足够了。
只有在用 const 引用替换复制是安全的时,才会应用此检查。当变量具有 const 限定符,或者仅作为 const 使用时,即仅对其调用 const 方法或运算符,或者在构造函数或函数调用中用作 const 引用或值参数时,就是这种情况。
示例
const string& constReference();
void Function() {
// The warning will suggest making this a const reference.
const string UnnecessaryCopy = constReference();
}
struct Foo {
const string& name() const;
};
void Function(const Foo& foo) {
// The warning will suggest making this a const reference.
string UnnecessaryCopy1 = foo.name();
UnnecessaryCopy1.find("bar");
// The warning will suggest making this a const reference.
string UnnecessaryCopy2 = UnnecessaryCopy1;
UnnecessaryCopy2.find("bar");
}
选项¶
- AllowedTypes¶
允许通过复制进行初始化的类型的分号分隔列表。接受正则表达式,例如 [Rr]ef(erence)?$ 匹配所有以 Ref、ref、Reference 和 reference 结尾的类型。默认情况下为空。如果列表中的名称包含序列 ::,则将其与限定类型名匹配(即 namespace::Type),否则将其与仅类型名匹配(即 Type)。
- ExcludedContainerTypes¶
允许其方法返回变量被复制的 const 引用类型的分号分隔列表。当一个代价高昂的复制变量由该列表中的类型返回值进行复制初始化时,检查不会触发。这可以用于排除已知为 const 不正确或其生命周期或不可变性未与容器的变异相关的类型。一个例子是视图类型,它们不拥有底层数据。与上面的 AllowedTypes 一样,接受正则表达式,并且包含 :: 决定是否匹配限定类型名。