2012-10-18 152 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用于分配和初始化之间的区别。 –