半开玩笑半认真:为什么我不能用类 C 语言,特别是 C# 来做++i++
?
我希望它增加值,在我的表达式中使用它,然后再次增加。
最佳答案
虽然简短的回答“它不是左值”是正确的,但这也许只是在回避问题。 为什么它不是左值?或者,正如我们在 C# 中所说的,变量。
原因是因为你不能既吃蛋糕又吃。从逻辑上解决:
首先,C# 中++ 运算符的含义,无论是后缀还是前缀,都是“取这个变量的值,增加值,将新值赋给变量,并产生一个值作为结果”。作为结果产生的值是原始值或增量值,具体取决于它是后缀还是前缀。但无论哪种方式,你都会产生一个值(value)。
其次,变量的值始终是该变量的当前内容。 (模数某些奇怪的线程场景,这会让我们走得很远。)
我希望你同意这些是非常明智的规则。
现在应该清楚为什么 i++ 的结果不能是变量,但如果不是,让我说清楚:
假设 i 为 10,i++ 的含义应该是“获取 i 的值 — 10 — 递增 — 11 — 存储 — i 现在是 11 — 并给出原始值作为结果 — 10”。所以当你说 print(i++) 时,它应该打印 10,而 11 应该存储在 i 中。
现在假设 i++ 的意思是返回变量,而不是值。你说 print(i++) 会发生什么?你得到 i 的值——10——增加它——11——存储它——我现在是 11——然后把变量作为结果返回。变量的当前值是多少? 11!这正是您不想打印的内容。
简而言之,如果 i++ 返回一个变量,那么它将做与运算符预期含义完全相反的事情!您的建议在逻辑上不一致,这就是为什么没有语言会那样做。
关于c# - 为什么我不能用类 C 语言做++i++?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1511082/