在下面的代码中,如果由于歧义而定义了多个强制转换运算符,我预计会出现编译器错误。
#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 <<' 不明确
转换是否有优先规则,或者为什么编译器默认选择数字转换?我确实明白我应该明确说明我的意思是哪个演员,但我的问题是编译器做出的默认选择。
编辑:使用编译器 MSVC 2010