为何C#中++/--运算符优先级规则看似不生效?
为什么
a++赋值给变量时结果不是递增后的值? 你混淆了运算符优先级和后缀自增运算符的语义规则,这是两个完全不同的概念:
- 后缀
a++的核心逻辑是:先返回变量当前的原始值,再对变量执行递增操作。这个规则是运算符本身的定义,和优先级无关。 - 回到你的代码:
具体执行步骤是:int a = 2; int b = a++;- 后缀
++运算符作用于a,但它先把a的当前值(2)作为整个a++表达式的结果输出。 - 完成取值后,再将a的值加1,此时a变成3。
- 最后赋值运算符把
a++表达式的结果(2)赋值给b,所以b的值是2而非3。
- 后缀
如果想要b得到递增后的值,应该使用前缀自增运算符++a,它的语义是先对变量递增,再返回新值:
int a = 2; int b = ++a; // 此时b的值是3,a的值也是3
运算符优先级只是决定了a++会先于赋值运算执行,但执行a++本身的逻辑是“先取值后递增”,这才是导致结果不符合你预期的根本原因。
内容的提问来源于stack exchange,提问作者runisten
相关产品推荐
相关产品推荐

