gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 14:36:42 29 4
gpt4 key购买 nike

我有 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/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com