如何表示这个基本表达式? [关闭]
Posted
技术标签:
【中文标题】如何表示这个基本表达式? [关闭]【英文标题】:How to represent this basic expression? [closed] 【发布时间】:2015-05-20 11:07:31 【问题描述】:我基本上知道后增量和前增量是如何工作的。但我只是想知道如果++i
表达式表示为i = i+1;
那么如何表示i++;
【问题讨论】:
都一样,只是执行时间不同? 我无法评论所有语言,但在 C 和 C++ 中,没有其他表达式具有与后增量相同的效果和价值。我怀疑 Java 也一样。 @kylecorver:不,这两个表达式具有相同的副作用但值不同。i++
是一个 rvalue,在增量之前保存i
的值的副本。 ++i
和 i=i+1
都是 lvalues 表示变量 i
在增量之后。
对于 i++,有一个在增量之前完成的副本,您可以在表达式中使用此副本。这就是为什么 ++i 更鼓励迭代器,因为没有额外的副本。
@NGI 是这样吗?有趣,从来不知道这个。您对此有任何参考,我可以参考吗?我认为现代编译器无论如何都会对此进行优化......
【参考方案1】:
在 C 或 C++ 中,
++i
表示
(i = i + 1)
i++
表示
(i = i + 1, i - 1)
【讨论】:
请在最后一种情况下添加逗号运算符的属性,否则可能对新手有些混淆。 :-) 对于 C++ 的情况,您可能必须添加类似 " 的免责声明,除非某些 yahoo 重载了i
" 类型的一个或多个相关运算符 .
@NatashaDutta @saka1029 (i = i + 1, i - 1)
在这行之后i
的值是多少以及原因
由逗号运算符 (e1, e2, ... , en)
分隔的表达式按从左到右的顺序进行计算。并返回最后一个表达式en
。
我认为当 i 是一个对象(如迭代器)时它会更复杂一些。这将涉及在第二种情况下复制对象。【参考方案2】:
就 i 的值如何变化而言,它们是相同的 - 所以它们都等价于 i = i + 1;
只有将它们用作表达式的一部分时,差异才会变得明显。
j = i++; // j = i
j = ++i; // j = i + 1
【讨论】:
嘿???i = i++;
是 _UB。不要使用它。阅读回合序列点。
为什么对这个答案投了反对票?如果有问题,我想纠正它。
@Natasha 我知道 i = i++ 从来都不是正确的,我只是把它作为一种有趣的副作用来教育和娱乐!听起来我应该删除它。
对不起,娜塔莎,我并不是要暗示你有......我是单独回复你的评论的。无意冒犯。
是的,这里也一样。希望你明白我为什么要不使用i = i++
,对吧?以上是关于如何表示这个基本表达式? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章