readability-make-member-function-const

查找可以标记为 const 的非静态成员函数,因为这些函数不以非 const 方式使用 this

此检查尝试根据 逻辑 constness(而非物理 constness)来标注方法。因此,它仅在方法执行的操作可以通过对对象的 const 指针进行操作来实现时,才会建议添加 const 限定符。

如果该方法以逻辑 constness 和物理 constness 相吻合的方式有限次地使用私有数据和函数,此检查还将建议为非 const 方法添加 const 限定符。

具体来说,如果该方法读取指针类型的私有成员变量,则此检查不会建议为非 const 方法添加 const,因为这允许修改指针指向的内容,而这可能无法保留逻辑 constness。出于同样的原因,它不允许调用私有成员函数或私有成员变量上的成员函数。

此外,此检查忽略以下函数:

此检查将保留以下实际示例:

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