gpt4 book ai didi

language-agnostic - 复合赋值运算符,如果值被修改(同时)会发生什么?

转载 作者:行者123 更新时间:2023-12-04 20:46:38 26 4
gpt4 key购买 nike

考虑以下伪代码(与语言无关):

int f(reference int y) {
y++;

return 2;
}

int v = 1;

v += f(v);

当函数 f变化 y (即 v )同时评估 v += f(v) , 是 v 的原始值“卡住”并更改为 v “丢失”?
v += f(v); // Compute the address of v (l-value)
// Evaluate v (1)
// Execute f(v), which returns 2
// Store 1 + 2
printf(v); // 3

最佳答案

大多数语言 +=运算符(以及任何其他复合赋值运算符,以及简单赋值运算符)具有从右到左的结合性。这意味着 f(v) value 将首先被评估,然后它的结果将被添加到 v 的当前值中。 .

所以在你的例子中它应该是 4,而不是 3:

C++: ( demo )

int f(int& v) {
v++;
return 2;
}

int main() {
int v = 1;
v += f(v);
cout << v; // 4
}

Perl: ( demo )
sub f {
$_[0]++;
return 2;
}

my $v = 1;
$v += f($v);

print $v; # 4

关于language-agnostic - 复合赋值运算符,如果值被修改(同时)会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17003365/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com