在下面的代碼中,如果由於含糊不清而定義了多個演員操作符,我會希望得到編譯器錯誤。重載的演員操作符的優先級
#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 int()
和operator float()
都然後定義我得到了我從一開始就預計:
'operator <<' is ambiguous
是否有強制轉換優先規則,或者爲什麼編譯器選擇默認情況下數字投?我明白我應該明確說出我的意思,但我的問題是編譯器默認選擇。
編輯:使用編譯器MSVC 2010
我不會依賴於有優先權。輸入你的意思。只需使用明確的演員。 'ss << static_cast(a);' –
andre
我編譯了你的例子,g ++給了我「錯誤:'ss << a'」中'operator <<'的模糊超載。所以,至少g ++正在按預期工作。 –
這似乎是編譯器相關的。你正在使用哪種編譯器? – SztupY