C++ 構文では、次のように構造体/クラス内でオーバーロードされた演算子を定義できます。
struct X
{
void operator+(X);
}
または次のような構造体/クラスの外:
void operator+(X, X);
ただし、次のようにはなりません:
struct X
{
static void operator+(X, X);
}
この決定の理由を知っている人はいますか?3 番目の形式が許可されないのはなぜですか? (MSVC では構文エラーが発生します。) この背後に何らかのストーリーがあるのではないでしょうか?
PS最初と2番目の定義が同時に存在すると、あいまいさが生じます。
1>CppTest1.cxx
1>c:\ballerup\misc\cf_html\cpptest1.cxx(39) : error C2593: 'operator +' is ambiguous
1> c:\ballerup\misc\cf_html\cpptest1.cxx(13): could be 'void B1::operator +(B1 &)'
1> c:\ballerup\misc\cf_html\cpptest1.cxx(16): or 'void operator +(B1 &,B1 &)'
1> while trying to match the argument list '(B1, B1)'
このあいまいさが 1,3 または 2,3 の間よりも優れている理由がわかりません。