【发布时间】:2015-10-12 00:09:13
【问题描述】:
这个问题已经被问过很多次了,“i++ 和 ++i 有什么区别”。 What is the difference between i++ and ++i? 接受的答案是,我在许多其他地方也看到过这种语言,“i++ 的意思是‘告诉我 i 的值,然后递增’,而 ++i 的意思是‘递增 i,然后告诉我价值'。
让我感到困惑的是,我不知道我们正在讨论在 either 场景中取回 i 的值。我认为 i++ 在语法上等同于:
i = i + 1;
这是一个语句,而不是一个表达式,所以我根本不明白 i 在哪里被返回。
你能解释一下这句话的真正含义吗?
谢谢,
【问题讨论】:
-
赋值可以是表达式也可以是语句;考虑
var a = 1; var b = (a = 2);。 (更多来自 Eric Lippert 的信息可以在 here 找到)。 -
根本的误解是认为
i++和++i在句法上 完全等同于任何事物。如果您将它们视为糖而困扰您,则不必这样做。 它们本身就是表达式,并且具有非常仔细地定义的含义。忽略您链接到的问题中已接受的答案;请阅读我的答案,看看是否有帮助。 -
@DodgyCodeException: 自定义操作符就是一个很好的例子,不做语义分析就无法知道是否有自定义操作符,也就是说它是不是句法属性。
-
@DodgyCodeException:我们可能还会考虑像
++q->i这样的情况与(q+=1)->i不同,但在这些情况下,将++q视为一件事有点滥用,因为它实际上不是该程序片段中的子表达式。这将是我们可以从语法上识别出来的东西。 -
@DodgyCodeException:我们也可以很容易地看到,等价并没有在另一个方向上运行。字符串 s 的
s += 1完全合法,但++s不合法。
标签: c#