c ++当我从const方法中的ref成员调用非const方法时,为什么我没有得到编译错误

时间:2016-07-01 09:29:51

标签: c++

为什么我可以在const方法中从ref成员调用非const方法? 如果m_a不是引用类型,我应该得到编译错误。 在http://cpp.sh/

上运行
// Example program
#include <iostream>

class A
{
    public:
    void nonConstMethodOfA()
    {
        std::cout << "nonConstMethodOfA is called" << "!\n";
    }
};

class B
{
    public:
    B(A& a)
    : m_a(a)
    {
        constMethodOfB();
    }

    private:
    A& m_a;
    void constMethodOfB() const
    {
        m_a.nonConstMethodOfA();
    }
};

int main()
{
  A varA;
  B varB(varA);
}

2 个答案:

答案 0 :(得分:2)

const A &表示&#34;对const A&#34;

的引用

A &表示&#34;对可变A&#34;

的引用

无法重新分配引用,因此A &也隐式表示对可变A&#34;的const引用。

答案 1 :(得分:1)

Const成员函数意味着您的this将指向一个const对象,因此只有this->fn()为const时才能调用fn()。它不会锁定类型,也不会锁定任何类似类型的输入参数或全局变量。但是,如果您愿意,也可以将它们指定为const。