这是我的代码。这会运行,但是当我从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/

10-15 05:48