我有 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() const
或 void 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/