readability-make-member-function-const¶
查找可以标记为 const 的非静态成员函数,因为这些函数不以非 const 方式使用 this。
此检查尝试根据 逻辑 constness(而非物理 constness)来标注方法。因此,它仅在方法执行的操作可以通过对对象的 const 指针进行操作来实现时,才会建议添加 const 限定符。
读取公有成员变量
调用公有 const 限定成员函数
返回 const 限定的
this将 const 限定的
this作为参数传递。
如果该方法以逻辑 constness 和物理 constness 相吻合的方式有限次地使用私有数据和函数,此检查还将建议为非 const 方法添加 const 限定符。
读取内置类型的成员变量
具体来说,如果该方法读取指针类型的私有成员变量,则此检查不会建议为非 const 方法添加 const,因为这允许修改指针指向的内容,而这可能无法保留逻辑 constness。出于同样的原因,它不允许调用私有成员函数或私有成员变量上的成员函数。
此外,此检查忽略以下函数:
声明为
virtual包含
const_cast是模板函数或类模板的一部分
具有空函数体
根本不(隐式地)使用
this(参见 readability-convert-member-functions-to-static)。
此检查将保留以下实际示例:
class E1 {
Pimpl &getPimpl() const;
public:
int &get() {
// Calling a private member function disables this check.
return getPimpl()->i;
}
...
};
class E2 {
public:
const int *get() const;
// const_cast disables this check.
S *get() {
return const_cast<int*>(const_cast<const C*>(this)->get());
}
...
};
应用检查建议的修改后,再次运行检查可能会发现更多将成员函数标记为 const 的机会。