return stack [ - stp]; - 先发生哪种情况?是stp递减还是返回的元素?

Eil*_*idh 2 c++ stack

如果我有以下代码:

int pop()
{
    return stack[--stp];
}
Run Code Online (Sandbox Code Playgroud)

我知道它做了两件事.它返回元素'stp'中一维数组'stack'中包含的值.它也在递减'stp'.

但这种情况发生在哪个顺序?

它是否返回元素的值stp,然后递减stp

或者它是否递减stp,然后返回现在由递减引用的元素的值stp

如果代码是:

int top()
{
    return stack[stp-1];
}
Run Code Online (Sandbox Code Playgroud)

它有什么不同吗?

我很抱歉,我知道这是非常常见的编码风格 - 我仍然在理解简洁,未注释的代码方面有些麻烦 - 甚至是这样的基础知识.抱歉.

Cho*_*ett 7

它将递减stp,然后从新stp值的位置返回数组中的值.

--stp是一个"前缀减量",它被定义为递减参数(stp),然后返回新值.它有一个名为"postfix decrement"的对应物stp--,它会递减stp然后返回值 - 因此stack[stp--]会给你当前stp偏移量的值,但仍会递减stp.

最后,你的版本stack[stp-1]将从同一个地方返回值stack[--stp],但stp它本身将保持不变.

  • "然后"意味着订单无法保证.然后`--stp`的值是递减的值,副作用将该值存储回`stp`但是在表达式中使用该值之前不必完成副作用,它只有由下一个序列点完成.(在这种情况下,没有可观察到的差异,但一般情况下可能会有.) (2认同)