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;

aに行く原因になりssます。

于 2012-07-01T17:14:44.330 に答える
1

ターゲットストリームがであるため、明らかにこの状況で機能しますcout。他の状況では壊れます。

于 2012-07-01T17:13:56.717 に答える
1

とが同じオブジェクトを参照しているため、ここで機能します。outcout

于 2012-07-01T17:15:16.253 に答える