2014-06-30 99 views
-1

下面是一個簡單的代碼:運算符重載返回類型

Iterator& operator=(const Iterator& other) 
{ 
    node_ = other.node_; 
    return(*this); // This clearly is a value 
    } 

在此我們承諾該函數將返回引用到迭代器數據類型。

但是我們返回一個值 ...這是如何工作..... ??

在許多例子中看到了這一點:

T& operator[] (unsigned int index) 
{ 
    if (index >= numEle) 
     return ptr[0]; // This clearly is a value 
    else 
     return ptr[index]; 
} 

它是一種非常天真的疑問,但不能真正地理解它是如何工作的.....

+0

你爲什麼說這是一個價值?它返回一個參考!爲什麼?因爲編譯器會看到你的函數簽名,並且足夠聰明以返回一個引用而不是值,所以根據函數的返回類型 – Sheen

+1

引用**總是**從一個值創建。轉換爲引用類型是自動的。 –

+0

*(this)是這個指針所指向的值......那個引用是如何的...? – PRP

回答

2

參考T&表示T類型的對象。因此,我們總是初始化參考T&T類型的對象:

int x = 5; 
int& r = x; 

在你的情況下,返回類型爲Iterator&,所以你返回Iterator對象。

當然,你可以初始化參考T&與另一T&爲其他參考表示T類型的對象:

int& r2 = r; 
0

你應該知道,數組元素並取消引用指針可以用作賦值運算符的左和右操作數。它可以被視爲變量和價值。

int arr[5] = {0}; 
int x = a[2];  // a[2] is on right side of `=` 
a[2] = 5;   // a[2] is on left side of `=` 

int *p; 
p = &arr[0]; 
*p = 10;   // *p is on left side of `=` 
a[1] = *p;   // *p is on right side of `=` 

所以,當函數的返回類型只是一個類型,那麼return語句返回值。當函數的返回類型爲時,參考爲一個變量,則return語句返回參考爲一個變量。

+0

我不太確定在這些例子中''[2]'是否是一個右值! – juanchopanza

+0

@juanchopanza;我在這點上有點弱,因爲在C中只有l值和r值。但在C++中,有l,r和pr值,有時我會感到困惑。我的意圖很清楚,'a [2]'可以用於'=':)的任一側 – haccks

0

這是不是返回一個值,它做廣告:返回參考(值)。