performance-unnecessary-value-param¶
标记那些在每次调用时都被复制的昂贵类型的值参数声明,而使用 const 引用传递就足够了。
该检查只应用于那些复制成本昂贵的类型的参数,这意味着它们不是平凡可复制的,或者具有非平凡的复制构造函数或析构函数。
为了确保将值参数替换为 const 引用是安全的,将采用以下启发式方法:
参数是 const 限定的;
参数不是 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¶
一个字符串,指定使用哪种包含样式,llvm 或 google。默认值为 llvm。
- AllowedTypes¶
一个用分号分隔的允许按值传递的类型的名称列表。接受正则表达式,例如 [Rr]ef(erence)?$ 匹配所有以 Ref、ref、Reference 和 reference 结尾的类型。默认情况下为空。如果列表中的名称包含序列 ::,则它与限定类型名称匹配(即 namespace::Type),否则它只与类型名称匹配(即 Type)。