あいまいさのために複数のキャスト演算子が定義されていると、以下のコードでコンパイラエラーが発生することが予想されます。オーバーロードされたキャスト演算子の優先順位
#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;
}
つのみ数値キャスト演算子が定義されているようにする代わりに、限り、それはエラーなし、警告なしでコンパイル、および数値キャストがoperator const char *()
に優先して使用されます。宣言された演算子の順序は違いはありません。
は、キャストのための優先順位のルールがある、またはなぜコンパイラはデフォルトで、数値のキャストを選ぶん:私は、私は最初から期待されるものを手に入れる'operator <<' is ambiguous
しかしoperator int()
とoperator float()
場合の両方が、定義されていますか?私は明示的にキャストを意味する必要があることを理解していますが、私の質問はコンパイラが行うデフォルトの選択です。
編集:コンパイラMSVC 2010を使用
私はそこに優先順位があることには依存しません。あなたが意味するものを入力してください。単に明示的なキャストを使用します。 'ss << static_cast(a);' –
andre
私はあなたの例をコンパイルして、g ++は "ss << a '"の演算子<<'のために "error:ambiguous overload"を返します。したがって、少なくともg ++は期待どおりに動作しています。 –
これはコンパイラに依存するようです。どのコンパイラを使用していますか? – SztupY