c# - 预增量运算符如何处理像 += ++a 这样的变量赋值?
问题描述
作为初学者,我很难理解下面的代码。我预计a
增量两次,结果将是 2,但事实并非如此。
var a = 0;
a += ++a;
Console.WriteLine(a); // 1
似乎删除了一个值。这怎么理解?
解决方案
嗯,a += n
相当于a = a + n
a += ++a;
因此等价于a = a + ++a;
反过来,这相当于a = a + (a + 1);
代入你的值a
,我们得到a = 0 + (0 + 1);
请记住,表达式中的操作数是从左到右计算的。Eric Lippert 在这里深入探讨了评估顺序。
这在实践中意味着什么?
好吧,如果我们写a = a + ++a;
,a
会变成1
因为第一个a
在求值时是 0,然后在 中变成 1 ++a
,意思是整体赋值是 的值1
。
如果我们稍微反转一下,然后写a = ++a + a;
then++a
将计算1
,当我们到达第二个a
时,它已经1
是 ,这意味着我们实际上有a = 1 + 1;
,所以我们得到 2。
您可以使用以下代码进行验证:
var a = 0;
a = a + ++a;
var b = 0;
b = ++b + b;
Console.WriteLine(a); // 1
Console.WriteLine(b); // 2
推荐阅读
- javascript - 在 Cloudflare Worker 上运行的 JavaScript 中的 Python 代码
- spring-boot - 带有自定义验证的 Spring Boot 测试实体字段验证
- html - 当动画在 DOM (Chrome) 中播放时,如果它位于“位置:相对”div,则溢出无法呈现
- c# - Dynamics CRM 集成 - 通过单个应用程序注册可以实现多个租户?
- javascript - 如何在不分离该模块的状态、变异、吸气剂的情况下分离 vuex 模块
- tensorflow - 使用 Transformer 进行文本摘要
- go - goruntine 没有同时运行?
- c - c中的strstr函数和多维数组
- oracle - if 语句中的子查询 (plsql)
- python - 我如何停止 python 中的方形运动,以便它可以向相反的方向移动?