以下のコードでは、あいまいさのために複数のキャスト演算子が定義されていると、コンパイラ エラーが発生することが予想されます。
#include <iostream>
#include <sstream>
struct A
{
operator const char*() { return "hello world\n"; }
operator float() { return 123.0F; }
//operator int() { return 49; }
};
int main()
{
A a;
std::stringstream ss;
ss << a;
std::cout << ss.str();
return 0;
}
代わりに、数値キャスト演算子が 1 つだけ定義されている限り、エラーや警告なしでコンパイルされ、数値キャストが優先して使用されますoperator const char *()
。宣言された演算子の順序に違いはありません。
ただし、operator int()
とoperator float()
の両方が定義されている場合は、最初から期待どおりの結果が得られます。
「演算子 <<」はあいまいです
キャストの優先順位規則はありますか?または、コンパイラがデフォルトで数値キャストを選択するのはなぜですか? どのキャストを意味するかを明示的に述べる必要があることは理解していますが、私の質問は、コンパイラが行うデフォルトの選択に関するものです。
編集:コンパイラMSVC 2010の使用