双等号在初始化中的含义是什么?

3

我在做一些实验时遇到了这行代码:

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

我在想它实际上是做什么的?(不是哈希函数或其他任何东西,只是“int variable = variable = value;”这个东西)

3个回答

5
那个表达式的读法是:
int home_address = (current_pos_ = hash(key,size_));

它将hash(key,size_)的结果分配给current_pos_,然后将current_pos_的值分配给home_address

2
更准确地说,它分配到 current_pos_,但是初始化home_address - Robᵩ

2
赋值运算符的结果为其左参数的最终值,因此这段代码将hash(key, size_)赋给了current_pos_,并用current_pos_的新值初始化了home_address
赋值运算符可以重载以返回任何类型的任何值,因此一般情况下,该表达式的行为是调用current_pos_的赋值运算符,并使用hash(key, size_)的结果(可能执行隐式转换),然后使用赋值运算符的返回值来初始化home_address(同样可能执行隐式转换)。

0
int x = y = 0;

等同于

int x = 0;
y = 0;

3
不完全是这样。更接近于 int y = 0; int x = y; - Mat
是的,在将值分配给 x 之前,它会将值分配给 y。 - Dave Hart
@Mat,它更接近于int y; y = 0; x = y;。请注意,与初始化相反,这里为 y 进行了赋值。 - juanchopanza
1
假设在某处有int y;,那么更像是这样:y=0; int x = y; :) - BЈовић

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接