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

标签 c++ constants shallow-clone

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

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

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

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

最佳答案

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

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

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

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

关于c++ - 我应该声明方法 "const"如果它只是 "shallow const"而不是 "deep const"吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62627666/

相关文章:

c++ - std::vector<A> error C2582: 'operator =' 函数在

c++ - 植绒算法在200个以上的物体上崩溃

C++ 函数返回 const char *

git - 如何在 git 中维护一组分支的浅克隆

自特定提交以来的 git 浅克隆

git - 如何浅克隆特定分支上的 repo 协议(protocol)?

c++ - 使用 g++ 的 undefined symbol

c++ - 有没有办法检测 QTreeWidgetItem 中的所有子项何时都被标记为 'hidden' ?

c++ - 为什么不将模板类型参数推断为 'const' ?

c++ - 标记所有不修改 const 的变量有什么缺点吗?