void f()
{}
struct A
{
void f()
{}
};
struct B : A
{
B()
{
f(); // A::f() is always called, and ::f is always ignored
}
};
int main()
{
B();
}
由於類B
的設計師,我可能不知道的事實,B
的基類,即A
,有一個成員函數A::f
,我只知道::f
,並呼籲::f
正是我所想要的東西。爲什麼成員函數的重載決議排除全局函數?
我期望的是編譯器給出一個錯誤,因爲調用f
含糊不清。但是,編譯器始終選擇A::f
並忽略::f
。我認爲這可能是一個很大的陷阱。
我只是想知道:
爲什麼成員函數的重載決議排除在全球的功能呢?
原因是什麼?
+1爲令人信服的情況。 – xmllmx