class MyClass {
public:
...
MyClass & operator=(const MyClass &rhs); // return MyClass&
...
}
爲什麼不C++ - 爲什麼operator =返回* this的引用而不是* this的對象?
class MyClass {
public:
...
MyClass operator=(const MyClass &rhs); // return MyClass
...
}
難道它是更有效的參考在這種情況下,返回的原因是什麼?
謝謝
// *更新*
我想我找到了關鍵的原因如下:
int i1, it2, i3;
(i1 = i2) = i3; // i3 will be assigned to i1
如果操作的返回類型=是MyClass的,而不是MyClass的&,那麼以下語句不會執行與內部數據類型相同的操作。
MyClass mc1, mc2, mc3;
(mc1 = mc2) = mc3;
通過遵循內置類型使用的規則,它被認爲是一種良好的做法。
// *** update ***
#include "stdafx.h"
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
int i1, i2, i3;
i1 = 0;
i2 = 2;
i3 = 3;
(i1 = i2) = i3;
cout << "i1: " << i1 << endl;
cout << "i2: " << i2 << endl;
cout << "i3: " << i3 << endl;
return 0;
}
// output from VS2010
/*
i1: 3
i2: 2
i3: 3
*/
見本類似的問題:(http://stackoverflow.com/q/2447696/478288) – chrisaycock 2011-04-12 03:47:21
否,'i3'將不會分配[在C++重載賦值運算符] 'i1'。其實這個行爲在你的'(i1 = i2)= i3'賦值中是未定義的。 – AnT 2011-04-12 04:34:59
@AndreyT:請參閱我的update2。 – q0987 2011-04-12 18:03:21