程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> 為什麼operator=操作符返回引用

為什麼operator=操作符返回引用

編輯:關於C++

問題:

MSDN文檔中解釋到:operator=操作符缺省情況下返回引用——

TYPE& TYPE::operator=(const TYPE&)

為什麼呢?我對此的理解是:“=”是個二進制操作符。其傳入的參數是引用對象,而其它的參數是類實例,“=”在這個類實例中被重載。而我在實際應用中可以不用返回任何類型(void)來實現賦值操作符,並仍然可以完成賦值操作。我這樣做正確嗎?如果不正確,那麼為什麼缺省的實現返回引用呢?

解答:

如果你再花點時間想一想可能就會有答案。其實很簡單。operator=返回引用的理由是使你能在一個語句中連接多個賦值。

TYPE a,b,c,d;

a = b = c = d;

編譯器是象這樣解釋前面一行的:

a = (b = (c = d));

在編譯過程中,賦值是右結合的。說白了就是如果你想要玩一下多個賦值,operator=返回的東西必須是右(rhs)賦值。除了返回對對象自身的引用還能有什麼呢?這就是為什麼operator=最後一行總是返回對this的引用:

CMyClass& CMyClass::operator=(const CMyClass& rhs) {

......

// do the

// assignment

return *this;

};

rhs參數被聲明為常量的話,就允許常量對象的賦值。沒有理由不允許。為什麼operator=要返回非常量引用呢?所以不管在哪裡你都能使用賦值語句對TYPE進行引用:

void MyFunc(TYPE& a);

...

TYPE a,b;

MyFunc(a=b); // 賦值以後傳遞

由於operator=返回非常量,你甚至可以使用圓括弧重載通常的等號結合率:

TYPE a,b,c;

(a = b) = c;

圖一是簡單的示例。並有一個問答題:當你完成並運行FOO時,它的輸出是什麼?

如果你想要學習更多的關於賦值操作的內容,我強烈推薦一本書《Effective C++》作者是Scott Meyers。本書由Addison Wesley Longman, 1997出版。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved