クラス メンバー名とメンバー関数名が同じ場合、G++ コンパイラからエラーが発生します。変数名がたまたま関数名と同じである場合はいつでも、コンパイラーは文句を言うようです。
Java では、そうではありません。関数名には常に括弧のペアが付いているため、G++ コンパイラが変数名と関数名を区別できないのはなぜだろうか。
クラス メンバー名とメンバー関数名が同じ場合、G++ コンパイラからエラーが発生します。変数名がたまたま関数名と同じである場合はいつでも、コンパイラーは文句を言うようです。
Java では、そうではありません。関数名には常に括弧のペアが付いているため、G++ コンパイラが変数名と関数名を区別できないのはなぜだろうか。
struct Callable
{
void operator()() const { }
};
struct Test
{
void Call() { }
Callable Call;
};
int main()
{
Test x;
x.Call(); // To which 'Call' does this refer?
}
これが2つの理由です:
operator()
()
)最初のケースでは、何をvariable()
しますか?2番目の例では、コンパイラーは、操作の戻り型によって正しい操作を判別する必要があります。これは、C++ではさまざまな理由で許可されていません。