如果存在非const限定私有方法,为什么不能在非const对象上调用const限定方法?

时间:2016-01-12 08:35:06

标签: c++ const overloading private-methods

以下代码无法编译:

struct A {
    void f () const { }
private:
    void f () { }
};

int main () {
    A a_nc;
    const A a_c;
    a_nc.f();
    a_c.f();
    return 0;
}

错误:

test.cpp: In function 'int main()':
test.cpp:4:10: error: 'void A::f()' is private
     void f () { }
          ^
test.cpp:10:12: error: within this context
     a_nc.f();
            ^

我在Windows上使用g++ (tdm64-1) 5.1.0

我不明白为什么当非const限定方法不可用时,编译器无法回退到const限定方法f

我无法想到允许编译器使用const限定方法而不是非const限定方法的上下文会使程序表现得很奇怪,有没有?如果没有,为什么不允许这样做?

修改

我已经看到了这个问题:In c++, why does the compiler choose the non-const function when the const would work also?

但是在上面,两种方法都可以使用,所以选择对我来说很清楚。在我的情况下,一个方法不可用,但编译器不可用于选择另一个,而是无法编译。

1 个答案:

答案 0 :(得分:0)

因为它首先通过重载决策选择一种方法。确定要调用的一个方法后,将检查您是否具有正确的访问权限。换句话说,访问说明符不会影响重载决策。