成员函数结束时的const是什么意思?

这个问题在这里已经有了答案:

  • C ++方法声明中最后一个“const”的含义? 7个答案

  • 这意味着*this是该成员函数中的const ,即它不会更改该对象。

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

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

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

    [1]注意:除非是const类型,否则临时对象不是一个const对象。


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

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

    这是const正确性哲学的一部分。 实质上,这意味着如果事情现在能够正常工作,而且他们不会改变,那么他们将永远不会失败。 换句话说,不变的东西更容易可靠地工作。 这个函数签名结尾的const是禁止事情中断的工具。 这反过来意味着你应该把const放在你可能的地方。


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

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

    链接地址: http://www.djcxy.com/p/40411.html

    上一篇: What is the meaning of a const at end of a member function?

    下一篇: Is the size of C "int" 2 bytes or 4 bytes?