我正在看the docs https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/operators/increment-operator并尝试了解操作员的实际工作原理。
增量运算符 (++) 将其操作数增加 1。增量运算符可以出现在其操作数之前或之后:++variable
and variable++
.
第一种形式是前缀递增操作。运算结果是操作数递增后的值。
第二种形式是后缀增量运算。运算的结果是操作数递增之前的值。
我希望以下操作能够返回3
,但它不会编译,并且声明运算符必须是变量、属性或索引器:
int x = 0;
Console.WriteLine(x++ ++ ++);
/*Expected output: 3*/
为什么这是错误的?我应该假设x++
不会为下一个返回相同类型的值++
操作员?
来自C# 6 语言规范草案 https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/language-specification/expressions#postfix-increment-and-decrement-operators:
后缀递增或递减运算的操作数必须是分类为变量、属性访问或索引器访问的表达式。运算结果是与操作数类型相同的值。
x
是一个变量,但是x++
不是“变量、属性访问或索引器访问”。
现在,让我们想象一个这样的后缀增量运算符调用是合法的世界。给定一个int x = 42;
, x++
增量x
为 43,但计算结果为 42。如果x++ ++
是合法的,它将适用于x++
,这不是你想要的(它会增加临时值,而不是x
)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)