运算符重载和无效操作数问题到二进制表达式

时间:2015-09-09 09:46:43

标签: c++

我创建了一个类Foo我为其重载了运算符< > <= >= != and =现在我有这两个代码,两者都应该相同,但只有1个有效:

这有效:

Foo foo = Foo("1");
if (foo <= something->foo) { ...

这不起作用:

if (Foo("1") <= something->foo) { ...

第二版中的错误是:

  

二进制表达式的操作数无效。候选函数不可行:期望第一个参数的l值。

这是什么意思以及为什么它不起作用?

1 个答案:

答案 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++

相关问题