假设我有一个包含我不想更改的成员变量的类。假设没有 setter 函数,将该变量设为私有(private)常量和仅将变量设为私有(private)有什么区别吗?
私有(private)的:
class ConstFoo
{
public:
Foo(int a);
virtual ~Foo();
int val(){ return val_; }
private:
int val_;
}
私有(private)常量:
class ConstFoo
{
public:
Foo(int a);
virtual ~Foo();
int val(){ return val_; }
private:
const int val_;
}
两者之间似乎没有区别,因为在任何一种情况下都无法更改
val_
的值,因此 const
限定符似乎是多余的。我可以看到明确添加
const
的一个原因是为了代码清晰,因此将来处理代码的人不会向函数添加 setter。但是,名称为 ConstFoo
并且文档特别说明它不是可变的,我认为这不会成为问题。 最佳答案
这完全取决于您希望此值如何“const”。
就目前而言,没有外部用户可以直接更改该值。但是他们可以间接这样做,因为对象本身可能不是 const
:
ConstFoo a{0};
ConstFoo b{2};
a = b;
a
现在有 2 个。另外,
ConstFoo
中的代码也可以改变它的值;这就是复制赋值运算符可以更改其值的原因。因此,如果您想确保特定成员对象在任何
ConstFoo
实例的整个生命周期中都采用一个值,则将其声明为 const
。当然,这使得
ConstFoo
不可赋值。关于c++ - C++ 类中的私有(private)常量是多余的吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50299632/