这是我的代码。这会运行,但是当我从ostream&operator <
作为附带问题,显示的错误消息是:无法将'std :: ostream {aka std :: basic_ostream}'左值绑定到'std :: basic_ostream &&'。这如何表明我缺少const?
#include <iostream>
using namespace std;
class pair_int{
public:
int x;
int y;
pair_int(int x, int y):x(x),y(y){};
friend ostream& operator<< (ostream & s, pair_int & c);
};
ostream& operator<<(ostream & s, const pair_int & c){
s << c.x;
s << ",";
s << c.y;
return s;
}
pair_int square(int x){
return pair_int(x, x*x);
}
int main(int argc,char * argv []){
int x;
cin >> x;
cout << square(x);
return 0;
}
最佳答案
因为调用square()
的结果是一个r值,它可以绑定到const l值引用或r值引用,但不能绑定到可变的l值引用。
这是设计使然,以防止您意外创建临时文件,然后将其突变并丢弃而没有任何意义。
(不适用于违反规则的Microsoft编译器)
关于c++ - 为什么operator <<需要const?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40962201/