3
#include <iostream>

using namespace std;

struct info {
    info(int x, int y) : x(x), y(y) {}
    int x;
    int y;
};

ostream& operator<<(ostream& out, const info &myinfo){
    out << myinfo.x << "  " << myinfo.y;
    return cout;
}

int main() {
    info a(1,2);
    info b(3,4);
    cout << a << " " << b << endl;
}

上述程序的输出似乎很好,即使operator <<.

谁能告诉我这个超载问题的影响是什么?我知道重载函数应该返回out而不是返回cout,但是上述版本的行为如何?

4

3 回答 3

6

在这种情况下,由于您传入std::cout了重载operator<<,因此行为没有区别。不过,一般来说,你会导致" " << b << std::endl被发送到std:cout,而你a会去你传入的任何内容。

例如:

info a(1,2);
info b(3,4);
std::ostringstream ss;
ss << a << " " << b << std::endl;

会导致ass

于 2012-07-01T17:14:44.330 回答
1

显然,它会在这种情况下工作,因为目标流是cout. 它会在其他情况下中断。

于 2012-07-01T17:13:56.717 回答
1

恰好在这里工作,因为outandcout指的是同一个对象。

于 2012-07-01T17:15:16.253 回答