| 為什么operator=操作符返回引用 |
| 問(wèn)題: |
| MSDN文檔中解釋到:operator=操作符缺省情況下返回引用―― TYPE& TYPE::operator=(const TYPE&) 為什么呢?我對此的理解是:“=”是個(gè)二進(jìn)制操作符。其傳入的參數是引用對象,而其它的參數是類(lèi)實(shí)例,“=”在這個(gè)類(lèi)實(shí)例中被重載。而我在實(shí)際應用中可以不用返回任何類(lèi)型(void)來(lái)實(shí)現賦值操作符,并仍然可以完成賦值操作。我這樣做正確嗎?如果不正確,那么為什么缺省的實(shí)現返回引用呢? 解答: 如果你再花點(diǎn)時(shí)間想一想可能就會(huì )有答案。其實(shí)很簡(jiǎn)單。operator=返回引用的理由是使你能在一個(gè)語(yǔ)句中連接多個(gè)賦值。 TYPE a,b,c,d; … a = b = c = d; 編譯器是象這樣解釋前面一行的: a = (b = (c = d)); 在編譯過(guò)程中,賦值是右結合的。說(shuō)白了就是如果你想要玩一下多個(gè)賦值,operator=返回的東西必須是右(rhs)賦值。除了返回對對象自身的引用還能有什么呢?這就是為什么operator=最后一行總是返回對this的引用: CMyClass& CMyClass::operator=(const CMyClass& rhs) { ...... // do the // assignment return *this; }; rhs參數被聲明為常量的話(huà),就允許常量對象的賦值。沒(méi)有理由不允許。為什么operator=要返回非常量引用呢?所以不管在哪里你都能使用賦值語(yǔ)句對TYPE進(jìn)行引用: void MyFunc(TYPE& a); ... TYPE a,b; MyFunc(a=b); // 賦值以后傳遞 由于operator=返回非常量,你甚至可以使用圓括弧重載通常的等號結合率: TYPE a,b,c; (a = b) = c; 圖一是簡(jiǎn)單的示例。并有一個(gè)問(wèn)答題:當你完成并運行FOO時(shí),它的輸出是什么? 如果你想要學(xué)習更多的關(guān)于賦值操作的內容,我強烈推薦一本書(shū)《Effective C++》作者是Scott Meyers。本書(shū)由Addison Wesley Longman, 1997出版。 |
聯(lián)系客服