我无法理解为什么对于以下虚拟类:
class Foo {
public:
operator double() const {
return 3.14;
}
};
Run Code Online (Sandbox Code Playgroud)
当我尝试比较实例时:
Foo f1;
Foo f2;
auto res = f1 < f2;
Run Code Online (Sandbox Code Playgroud)
较少的运营商使用现有的
operator double()const
比较价值时.我在哪里可以找到这种行为的规则?
Som*_*ken 10
正如评论中所提到的,允许编译器在此处进行1次用户定义的转换.它看到它可以将两个对象转换为double并且double确实具有 operator <,所以它就是这样做的.如果您(程序员)要求它时只想使用转换运算符,您可以添加explicit:
explicit operator double() const {
return 3.14;
}
Run Code Online (Sandbox Code Playgroud)
现在,编译器只能在您将其显式转换为此类型时调用它:
Foo f1;
double d = (double)f1; // conversion operator
Run Code Online (Sandbox Code Playgroud)