C ++

我不明白后缀和前缀增量或减量的概念。 任何人都可以提供更好的解释?


到目前为止,所有四个答案都是不正确的 ,因为他们断言了特定的事件顺序。

相信“都市传奇”已经导致许多新手(和专业人士)误入歧途,关于表达式中未定义行为的问题层出不穷。

所以。

对于内置的C ++前缀运算符,

++x

增加x并产生表达式x作为左值,while

x++

递增x并产生作为表达导致的原始值x

特别是, x++没有没有时间限令隐含的原始值的增加和生产x 。 编译器可以自由发出产生x原始值的机器代码,例如它可能出现在某个寄存器中,并延迟增量直到表达式结束(下一个序列点)。

不正确地相信增量的人必须首先出现,而且他们很多,通常由于某些表达式实际上具有未定义行为时必须具有明确的效果才能得出结论。


int i, x;

i = 2;
x = ++i;
// now i = 3, x = 3

i = 2;
x = i++; 
// now i = 3, x = 2

'Post'意味着之后 - 也就是说,增量是在变量被读取后完成的。 'Pre'表示之前 - 所以变量值先增加,然后在表达式中使用。


没有人回答这个问题: 为什么这个概念混乱?

作为一名本科计算机科学专业,由于阅读代码的方式,我花了一段时间才明白这一点。

以下是不正确的!


x = y ++

X是等于y 递增。 这在逻辑上似乎意味着X在增量操作完成等于Y的值。 发表的意思。

要么

x = ++ y
X等于y 前的增量。 这在逻辑上似乎意味着X在增量操作完成之前等于Y的值。 意义


它的工作方式实际上是相反的。 这个概念令人困惑,因为这种语言具有误导性。 在这种情况下,我们不能用这些词来定义行为。
x = ++ y实际上是读取的,因为X等于增量的Y值。
x = y ++实际上是读取的,因为X等于增量的Y值。

前后的词语相对于英语的语义倒退的 。 它们只意味着++与Y的关系。仅此而已。

就个人而言,如果我有选择,我会切换++ y和y ++的含义。 这只是我必须学习的一个成语的例子。

如果有一种这种疯狂的方法,我想用简单的话来说。

谢谢阅读。

链接地址: http://www.djcxy.com/p/72249.html

上一篇: c++

下一篇: Free UI templates that works with asp.net MVC and razor view