如果我为我的班级定义了多个转换运算符:
#include <iostream>
#include <string>
class Widget {
public:
operator double() {
return 42.1;
}
operator std::string() {
return "string";
}
};
int main(void) {
Widget w;
std::cout << w << std::endl;
return 0;
}
即使我更改了成员函数的顺序,它的输出也是42.1
。
为什么编译器总是使用operator double()
而不是operator std::string()
?这有什么功能解决规则?
如果我将第二个转换运算符定义为int
而不是std::string
,编译器会抱怨模糊的调用。