如果它只是 "shallow const" 而不是 "deep const",我应该声明方法 "const" 吗?

Should I declare method "const" if it is "shallow const" only, not "deep const"?

我有 class Foo 并且它的成员 bar_ 是一个指向一些数据的指针。方法 modify 修改数据,但不修改指针本身。因此我可以将方法声明为 const:

class Foo {
public:
    Foo() : bar_(new double) {};
    void modify() const {*bar_ += 1;};
private:
    double *bar_;
};

如果我将方法声明为const,它将可以从其他const 方法访问,这更加灵活。同时,我可以删除 const 作为对其他开发人员和用户的提示,该方法会间接修改数据(并假设数据由 class 拥有)。所以我在这里有一个选择:将 modify 声明为 const 或删除 const: void modify() constvoid modify() .

每种方法的优缺点是什么?指南怎么说?我该怎么办?

const 在方法声明之后是一个意图声明 - const 方法是幂等的;它们不会修改对象的状态,并且可以在 const 个实例上调用。

如果 bar_ 指向的值是对象状态的一部分,则 const 方法不应修改它。

此外,即使名称 modify() 听起来像是在以某种方式修改对象,因此不应声明为 const

但另一种方式也很重要 - 如果方法不修改状态,建议声明它 const(参见 C++ 核心指南 Con.2)。