2012-10-18 151 views
2

雙「=」我碰到這條線的時候,我做了一些laborations:在初始化

int home_address = current_pos_ = hash(key, size_); 

,我想知道它實際上呢? (不是散列函數或任何東西,只是 「int變量=變量=值;」 的東西)

回答

5

表達被讀爲:

int home_address = (current_pos_ = hash(key,size_)); 

它將hash(key,size_)的結果分配到current_pos_,然後將current_pos_的值分配到home_address

+2

更準確地說,它分配給'current_pos_',但是*初始化*'home_address'。 –

0
int x = y = 0; 

相同

int x = 0; 
y = 0; 
+0

什麼是'y'? – juanchopanza

+3

這不完全是。它更接近'int y = 0; int x = y;' – Mat

+0

是的,在將其賦值給x之前,它確實將值賦給了y。 –

2

賦值運算符求值爲其左參數的最終值,因此此代碼將hash(key, size_)指定爲current_pos_,並使用新值current_pos_初始化home_address

可以重載賦值運算符以返回任何類型的任何值,因此一般來說,此表達式的行爲是調用current_pos_的賦值運算符,結果爲hash(key, size_)(可能執行隱式轉換),然後用賦值運算符的返回值初始化home_address(也許執行隱式轉換)。

+0

+1用於分配和初始化之間的區別。 –