簡體   English   中英

澄清C ++中<<操作符重載的行為

[英]Clarify the behaviour of << operator overloading of in C++

這是程序:

#include <iostream>
using namespace std;
class X {
int no;
public:
    X(int n=1) : no{n} {}
    X(const X& rop) : no{rop.no * 11} {}
    void f(X x, X& y);
    ostream& print(ostream& o) const {return o << no;}
};
ostream& operator<<(ostream& o, const X& x) {
    return x.print(o);
}
void X::f(X x, X& y) {
    ++no; ++x.no; ++y.no;
    cout << *this << x << y;
}
int main()
{
    X a, b{5}, c{6};
    a.f(b, c);
    cout << a << b << c;
    return 0;
}

我預期的輸出:267257

但是我得到了:2567257

看來,這種對我而言的行為與cout << x ,但我不明白為什么cout << x輸出56而不是6

參數x聲明為傳遞值; 它將從參數b復制。 根據X的copy構造函數,數據成員no初始化為rop.no * 11rop.no * 11 55 ++x.no; ,您將得到56 傳遞值還可以解釋為什么在調用af b.no仍保留5 ,因為x是一個副本,並且對其進行的任何修改都與參數b沒有關系。

另一方面,將y聲明為按引用傳遞,那么就沒有復制,也不會調用復制構造函數。 然后對於y.no您將得到6的值,在++y.no它將是7 並且在調用af c.no變為7

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM