作者热门文章
- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
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/
我是一名优秀的程序员,十分优秀!