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
的机会。