私有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不可分配. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- Flash Builder 4 For Linux
- 物理层(1)——传输信道和物理信道
- c# – .NET删除父类是否会将子节点变为“垃圾”?
- ORA-38760: This database instance failed to turn on fla
- FLASHBACK INSTEAD OF DELAYING APPLYING OF LOGS ON STAND
- postgresql – 在Amazon RDS Postgres上编写PostGIS设置脚本
- 测试驱动开发三部曲——走出TDD丛林
- ruby-on-rails – Heroku上的Rails 4.0.1无法创建数据库
- Linux 一键静音脚本
- 使用 Dojo 显示表格数据,并带筛选(filter)功能(2) - filte