如果它只是 "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() const
或 void modify()
.
每种方法的优缺点是什么?指南怎么说?我该怎么办?
const
在方法声明之后是一个意图声明 - const
方法是幂等的;它们不会修改对象的状态,并且可以在 const
个实例上调用。
如果 bar_
指向的值是对象状态的一部分,则 const
方法不应修改它。
此外,即使名称 modify()
听起来像是在以某种方式修改对象,因此不应声明为 const
。
但另一种方式也很重要 - 如果方法不修改状态,建议声明它 const
(参见 C++ 核心指南 Con.2)。
我有 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() const
或 void modify()
.
每种方法的优缺点是什么?指南怎么说?我该怎么办?
const
在方法声明之后是一个意图声明 - const
方法是幂等的;它们不会修改对象的状态,并且可以在 const
个实例上调用。
如果 bar_
指向的值是对象状态的一部分,则 const
方法不应修改它。
此外,即使名称 modify()
听起来像是在以某种方式修改对象,因此不应声明为 const
。
但另一种方式也很重要 - 如果方法不修改状态,建议声明它 const
(参见 C++ 核心指南 Con.2)。