gpt4 book ai didi

c# - 这个表情是怎么回事? b = a + (a = a + 5)

转载 作者:IT王子 更新时间:2023-10-29 03:42:56 25 4
gpt4 key购买 nike

a = 5
b = a + (a = a + 5)

结果 b = 15

为什么第一个 'a' 在之后没有变化 (a = a + 5)?但是为什么第二个改变了?这里究竟发生了什么?

最佳答案

表达式从左到右计算 - 总是,不管分组。所以它等同于:

a = 5;

int lhs = a; // 5
int rhs = (a = a + 5); // Increments a by 5 (i.e. a=10), and rhs=10
b = lhs + rhs; // 15

因此在执行此操作后,a 为 10。但这只会发生在 a 已针对第一个操作数求值之后主要加法,这就是为什么结果是 15 而不是 20。

了解评估顺序与优先级不同的部分非常重要。考虑一下:

int x = First() + Second() * Third();

优先级 表示乘法适用于调用 Second()Third() 的结果 - 但是 First() 仍然首先被评估。换句话说,这个语句等同于:

int lhs = First();
int rhs = Second() * Third();
int x = lhs + rhs;

参见 Eric Lippert's blog post on predence, associativity and ordering了解更多详情。

不过,我强烈建议不要编写这样的代码。

关于c# - 这个表情是怎么回事? b = a + (a = a + 5),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27937789/

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