void f()
{}
struct A
{
void f()
{}
};
struct B : A
{
B()
{
f(); // A::f() is always called, and ::f is always ignored
}
};
int main()
{
B();
}
classBの設計者として、 がB基本クラスである、つまりAがメンバー関数を持っているという事実を知らないかもしれませんが、私A::fは知っているだけ::fで、呼び出し::fはまさに私が望むものです。
私が期待しているのは、呼び出しのあいまいさのためにコンパイラがエラーを出すことfです。ただし、コンパイラは常に を選択A::fして無視し::fます。これは大きな落とし穴になるのではないかと思います。
私はただ疑問に思います:
メンバー関数のオーバーロード解決でグローバル関数が除外されるのはなぜですか?
根拠は何ですか?