加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

私有const在C类中是多余的吗?

发布时间:2020-12-16 10:53:53 所属栏目:百科 来源:网络整理
导读:假设我有一个带有成员变量的类,我不想更改它.假设没有setter函数,那么使该变量成为私有const和仅将变量设为私有之间有什么区别吗? 私人的: class ConstFoo{public: Foo(int a); virtual ~Foo(); int val(){ return val_; }private: int val_;} 私人Const:
假设我有一个带有成员变量的类,我不想更改它.假设没有setter函数,那么使该变量成为私有const和仅将变量设为私有之间有什么区别吗?

私人的:

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

私人Const:

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

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

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

解决方法

这都是你想要这个值的“常量”的问题.

目前看来,没有外部用户可以直接更改该值.但他们可以间接地这样做,因为对象本身可能不是const:

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

一个现在有2个.

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

因此,如果要确保特定成员对象在任何ConstFoo实例的整个生命周期中都采用一个值,则将其声明为const.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读