[英]no match for ‘operator<<’ error when overloading output operator and post increment operator
当我尝试编译以下代码时,编译器会生成一长段错误消息,并显示类似“ std :: cout << aA :: operator ++(0)'中'operator <<'的不匹配”之类的内容。 “候选人是...”
但是,如果将operator <<的第二个参数的类型更改为“ const A&”或简单地为“ A”,它就会神奇地进行编译。
为什么此更改有效? 当<< <<重载时,c ++标准是否将第二个参数的类型强制为const T&或T? 还是有其他原因?
#include <iostream>
using namespace std;
class A
{
public:
A operator++(int) { return A(); }
};
ostream& operator<<(ostream& os, A& a)
{
return os;
}
int main()
{
A a;
cout << a++;
return 0;
}
您缺少的是operator++
返回一个临时值。 它必须增加值,但仍返回原始值,因此它要做的是保存原始值的副本,然后递增值,然后返回原始值副本。
此副本作为未命名的临时返回,并且该语言指出不能将此类值绑定到非const引用(作为您的参数)。 无论如何,您都不想传递给输出函数作为非常量引用,就好像您在输出过程中更改了值会使用户感到非常失望。
您不能使用r值初始化非常量引用。 您的operator++
返回一个r值。 有两种方法:
将您<<
操作符定义为
ostream& operator<<(ostream& os, const A& a)
或传递l值
A b = a++;
cout << b;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.