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

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

const当C ++ 中的关键字在成员函数的末尾(在参数列表之后)写入时,它到底意味着什么呢?



慕丝7291255
浏览 598回答 3
3回答

芜湖不芜

这意味着,*this是const该成员函数的内部,即,它不改变的对象。关键字this是一个prvalue表达式,其值是调用该函数的对象的地址。类的this成员函数的类型X是X*。如果声明了成员函数const,则类型this为const X*。[第9.3.2节§1]在const成员函数中,通过const访问路径访问调用函数的对象; 因此,const成员函数不得修改对象及其非静态数据成员。[第9.3.2节§2]这意味着const可以const在类的实例上调用成员函数。阿非const成员函数不能被称为上[1]一个const对象,因为它可能尝试修改它。[1]注意:临时不是const对象,除非它是const类型。

慕侠2389804

const在函数签名的末尾意味着函数应该假定它所属的对象是const。实际上,它意味着您要求编译器检查成员函数是否以任何方式更改对象数据。这意味着要求编译器检查它是否不直接更改任何成员数据,并且它不会调用任何本身不保证它不会更改对象的函数。在创建const对象时,您要求编译器确保该对象在初始化之后不会更改。这反过来意味着编译器将检查您是否不直接更改其成员数据,并且您不会调用任何不保证它不会更改对象的函数。这是const正确性哲学的一部分。从本质上讲,这意味着如果事情现在正常发挥并且它们不会改变那么它们就永远不会破裂。换句话说,不断的事物更容易可靠地工作。const函数签名末尾的这个东西是一个禁止破坏事物的工具。这反过来意味着你应该放在const你可能的任何地方。

慕容3067478

编译器优化是可能的,但主要的好处是强制执行函数声明中表示的契约 - 如果将成员函数定义为const,则编译器会阻止对该函数内对象的任何修改。您可以mutable在声明中使用此限制来豁免类中的各个字段。这很有用,例如当你有一个封装了自己的lock_guard的类时,即使在const成员函数中也必须更改其值以强制执行线程安全。
打开App,查看更多内容
随时随地看视频慕课网APP