c# - 为什么我不能用类 C 语言做++i++?

标签 c# c post-increment pre-increment

半开玩笑半认真:为什么我不能用类 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/

相关文章:

c# - 检查 WebAPI 在 C# Code Behind 中是否可用的简单、最佳方法

c# - Wp插入数据库异常

c - 如何在数组C编程中找到某个数字?

c - 我不知道前后增量

c++ - 在重载 I/O 运算符中重载增量运算符时出错

c# 将类属性绑定(bind)到复杂结构

c# - 从DataReader检索数据的最有效方法是什么?

html - C/HTML : Correctly printing the username and password input of the user

c - 未找到项目时想要打印

c++ - 使用后增量构造带有变量的整数对 std::pair