如何表示这个基本表达式? [关闭]

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 的值的副本。 ++ii=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++,对吧?

以上是关于如何表示这个基本表达式? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

C ++业务规则表达式解析器/评估[关闭]

php正则表达式基本

正则表达式 - 匹配规则

正则表达式 - 匹配规则

正则表达式匹配规则

正则表达式—匹配原则