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
ます。これは大きな落とし穴になるのではないかと思います。
私はただ疑問に思います:
メンバー関数のオーバーロード解決でグローバル関数が除外されるのはなぜですか?
根拠は何ですか?