【发布时间】:2018-10-22 07:15:31
【问题描述】:
假设我有一个带有我不想更改的成员变量的类。假设没有 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 并且文档明确指出它不是可变的,我认为这不会是一个问题。
【问题讨论】:
-
您可以在第一种情况下使用一些 setter 成员函数(方法)更改
int val,但在第二种情况下则不能。 -
让它像
int val() const { return val_; }这样如果你有const ConstFoo foo;或bar(const ConstFoo& foo)你可以打电话给foo.val()否则不能。对于val_成员,这在当前上下文中并没有太大的区别。
标签: c++ class constants private