我创建了一个类Foo
我为其重载了运算符< > <= >= != and =
现在我有这两个代码,两者都应该相同,但只有1个有效:
这有效:
Foo foo = Foo("1");
if (foo <= something->foo) { ...
这不起作用:
if (Foo("1") <= something->foo) { ...
第二版中的错误是:
二进制表达式的操作数无效。候选函数不可行:期望第一个参数的l值。
这是什么意思以及为什么它不起作用?
答案 0 :(得分:6)
您编写运算符的方式是禁止传入 rvalues ;正如 @TartanLlama 所指出的那样,一个例子可能是非const引用。
bool operator<= (Foo& a, Foo& b); // will err
bool operator<= (const Foo& a, const Foo& b); // will work fine
不起作用的原因是it's simply disallowed in C++。