performance-unnecessary-value-param

标记那些在每次调用时都被复制的昂贵类型的值参数声明,而使用 const 引用传递就足够了。

该检查只应用于那些复制成本昂贵的类型的参数,这意味着它们不是平凡可复制的,或者具有非平凡的复制构造函数或析构函数。

为了确保将值参数替换为 const 引用是安全的,将采用以下启发式方法:

  1. 参数是 const 限定的;

  2. 参数不是 const,但仅在其上调用 const 方法或运算符,或者在构造函数或函数调用中用作 const 引用或值参数。

示例

void f(const string Value) {
  // The warning will suggest making Value a reference.
}

void g(ExpensiveToCopy Value) {
  // The warning will suggest making Value a const reference.
  Value.ConstMethd();
  ExpensiveToCopy Copy(Value);
}

如果参数不是 const,仅复制或赋值一次,并且分别具有非平凡的移动构造函数或移动赋值运算符,则检查将建议移动它。

示例

void setValue(string Value) {
  Field = Value;
}

将变为

#include <utility>

void setValue(string Value) {
  Field = std::move(Value);
}

选项

IncludeStyle

一个字符串,指定使用哪种包含样式,llvmgoogle。默认值为 llvm

AllowedTypes

一个用分号分隔的允许按值传递的类型的名称列表。接受正则表达式,例如 [Rr]ef(erence)?$ 匹配所有以 RefrefReferencereference 结尾的类型。默认情况下为空。如果列表中的名称包含序列 ::,则它与限定类型名称匹配(即 namespace::Type),否则它只与类型名称匹配(即 Type)。