2014-04-19 21 views
1
MyClass& operator=(const MyClass& other) 
{ 
    //Implement 
    return *this; 
} 
MyClass operator=(const MyClass& other) 
{ 
    //Implement 
    return *this; 
} 
void operator=(const MyClass& other) 
{ 
    //Implement 
} 

當我測試這些方法時,結果是一樣的。在幾乎書中,我看到第一種方法(MyClass &)比第二種方法更多。他們之間有什麼不同?哪種方法真的正確和快速?一個方法返回地址和第二個返回值。C++識別不同的運算符=

+1

[引用returing與值返回有什麼區別?](http://stackoverflow.com/questions/15847889/difference-between-returning-reference-vs-returning-value-c) – 0x499602D2

+0

謝謝。我知道了 – bm2i

+0

另外,你不能通過返回值來重載,編譯器應該抱怨那些函數調用是不明確的。 – 0x499602D2

回答

2

當我測試這些方法時,結果是一樣的。

這取決於你如何測試你的類,即:

void foo (MyClass& a); 

MyClass a1; 
MyClass a2; 

foo(a1 = a2); 

在第二運營商實現的情況下(返回MyClass),上面的代碼(內foo)不會修改a1實例,但一臨時值。

在幾乎書我看到的是,第一方法(MyClass的&)使用多於 第二種方法。

並且那是正確的,它更正確的賦值操作符

返回參考*this什麼是他們之間有什麼不同?哪種方法真的正確和快速?

int n = 0; 
int k = 10; 
(n = k) = 1; 
std::cout << n; 

這裏輸出,您將獲得1:因爲它不會做你的對象的任何副本,也是它更合適的,因爲這就是類型多麼原始的行爲,即

第一個版本速度更快,正確,因爲(n = k)返回對n的引用。