【发布时间】:2020-06-12 23:01:58
【问题描述】:
为什么下面的代码不能编译:
B b1(1), b2(2), b3(3);
const B b4 = b1 + (b2 + b3);
直到我替换这个:
B operator+(B& b) {
return B(n + b.n);
}
有了这个:(不知道编译器提示为什么要写const)
B operator+(const B& b) {
return B(n + b.n);
}
我得到的错误:
二进制表达式的无效操作数('B' 和 'B')
注意:候选函数不可行:期望第一个 l 值 论据
注意:候选模板被忽略:无法匹配 'reverse_iterator' 针对 'B' 运算符+(类型名 reverse_iterator<_iter>::difference_type __n, const reverse_iterator<_iter>& __x)
另外,为什么这样有效? (和上一个案例类似)
bool Test(int x)
{
return x==0;
}
Test(0);
【问题讨论】:
-
临时对象不能绑定到非常量左值引用。
-
顺便说一句,你还是错过了
const:B operator+(const B& b) const。 -
b1 和其余的不是临时的@Jarod42
-
它可以在没有其他 const 的情况下工作
-
加上为什么更改参数(而不是返回值)作为 const 解决了这个问题?可能有人发布完整的答案,这没有意义