为了账号安全,请及时绑定邮箱和手机立即绑定

成员函数结束时const的含义是什么?

成员函数结束时const的含义是什么?

C++
慕丝7291255 2019-08-27 15:50:07
成员函数结束时const的含义是什么?const当C ++ 中的关键字在成员函数的末尾(在参数列表之后)写入时,它到底意味着什么呢?
查看完整描述

3 回答

?
芜湖不芜

TA贡献1796条经验 获得超7个赞

这意味着,*thisconst该成员函数的内部,即,它不改变的对象。

关键字this是一个prvalue表达式,其值是调用该函数的对象的地址。类的this成员函数的类型XX*。如果声明了成员函数const,则类型thisconst X*。[第9.3.2节§1]

const成员函数中,通过const访问路径访问调用函数的对象; 因此,const成员函数不得修改对象及其非静态数据成员。[第9.3.2节§2]

这意味着const可以const在类的实例上调用成员函数。阿非const成员函数不能被称为上[1]一个const对象,因为它可能尝试修改它。

[1]注意:临时不是const对象,除非它是const类型。


查看完整回答
反对 回复 2019-08-27
?
慕侠2389804

TA贡献1719条经验 获得超6个赞

const在函数签名的末尾意味着函数应该假定它所属的对象是const。实际上,它意味着您要求编译器检查成员函数是否以任何方式更改对象数据。这意味着要求编译器检查它是否不直接更改任何成员数据,并且它不会调用任何本身不保证它不会更改对象的函数。

在创建const对象时,您要求编译器确保该对象在初始化之后不会更改。这反过来意味着编译器将检查您是否不直接更改其成员数据,并且您不会调用任何不保证它不会更改对象的函数。

这是const正确性哲学的一部分。从本质上讲,这意味着如果事情现在正常发挥并且它们不会改变那么它们就永远不会破裂。换句话说,不断的事物更容易可靠地工作。const函数签名末尾的这个东西是一个禁止破坏事物的工具。这反过来意味着你应该放在const你可能的任何地方。


查看完整回答
反对 回复 2019-08-27
?
慕容3067478

TA贡献1773条经验 获得超3个赞

编译器优化是可能的,但主要的好处是强制执行函数声明中表示的契约 - 如果将成员函数定义为const,则编译器会阻止对该函数内对象的任何修改。

您可以mutable在声明中使用此限制来豁免类中的各个字段。这很有用,例如当你有一个封装了自己的lock_guard的类时,即使在const成员函数中也必须更改其值以强制执行线程安全。


查看完整回答
反对 回复 2019-08-27
  • 3 回答
  • 0 关注
  • 597 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信