C ++の非表示ルールの背後にある理論的根拠は何ですか?
class A { void f(int); }
class B : public A { void f(double); } // B::f(int) is hidden
それが意味のある機能であれば、同じ名前の新しい関数を定義せずに関数を非表示にすることも可能であると思います。次のようなものです。
class B : public A { hide void f(double); }
しかし、これは不可能です。
ディレクティブを明示的に使用する場合、コンパイラはとにかく関数を再表示できなければならないため、コンパイラの作業が単純化されるとは思いません。
using
class B : public A { using A::f; void f(double); } // B::f(int) NOT hidden
では、なぜ隠蔽ルールがあるのでしょうか。
ふむ、3つの答えはすべて良いようで、隠蔽ルールのさまざまな根拠を示しています。どの答えを受け入れるべきかわかりません。