首页 > 解决方案 > C++ 类中的私有 const 是多余的吗?

问题描述

假设我有一个带有我不想更改的成员变量的类。假设没有 setter 函数,将该变量设为私有 const 与仅将变量设为私有之间有什么区别吗?

私人的:

class ConstFoo
{
public:
    Foo(int a);
    virtual ~Foo();
    int val(){ return val_; }
private:
    int val_;
}

私人常数:

class ConstFoo
{
public:
    Foo(int a);
    virtual ~Foo();
    int val(){ return val_; }
private:
    const int val_;
}

似乎两者之间没有区别,因为val_在任何一种情况下都无法更改值,因此const限定符似乎是多余的。

我可以看到显式添加的一个原因const是为了代码清晰,因此将来处理代码的人不会向函数添加 setter。但是,由于名称ConstFoo和文档明确指出它不是可变的,我认为这不会是一个问题。

标签: c++classconstantsprivate

解决方案


这完全取决于您希望这个值有多“const”。

就目前而言,没有外部用户可以直接更改该值。但他们可以间接这样做,因为对象本身可能不是const

ConstFoo a{0};
ConstFoo b{2};
a = b;

a现在有 2 个。

另外,里面 ConstFoo的代码也可以改变它的值;这就是复制赋值运算符可以更改其值的原因。

因此,如果您想确保特定成员对象在任何ConstFoo实例的整个生命周期中都采用一个值,您可以声明它const

当然,这使得ConstFoo不可分配。


推荐阅读