[英]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 * 11
, rop.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.