2

重複の可能性:
同じ名前のクラスメソッドと変数、Java ではなく C++ でコンパイルエラー?

クラス メンバー名とメンバー関数名が同じ場合、G++ コンパイラからエラーが発生します。変数名がたまたま関数名と同じである場合はいつでも、コンパイラーは文句を言うようです。

Java では、そうではありません。関数名には常に括弧のペアが付いているため、G++ コンパイラが変数名と関数名を区別できないのはなぜだろうか。

4

2 に答える 2

8
struct Callable
{
    void operator()() const { }
};

struct Test
{
    void Call() { }
    Callable Call;
};

int main()
{
    Test x;
    x.Call(); // To which 'Call' does this refer?
}
于 2011-12-20T21:57:27.180 に答える
3

これが2つの理由です:

  • 変数が過負荷になる可能性がありますoperator()
  • 関数のアドレスを取得するか、関数の参照を作成する場合があります(関数呼び出しを関連付けずにその名前を使用します()

最初のケースでは、何をvariable()しますか?2番目の例では、コンパイラーは、操作の戻り型によって正しい操作を判別する必要があります。これは、C++ではさまざまな理由で許可されていません。

于 2011-12-20T21:57:01.097 に答える