【问题标题】:When does the increment operation happen exactly for x++?x++ 的增量操作何时发生?
【发布时间】:2019-04-16 16:19:37
【问题描述】:

我知道 x++ 是指后增量。它首先使用原始值,然后使用增量值。

但这实际上是什么时候发生的呢? 执行代码中的下一个直接行时会发生这种情况吗? 原值返回一次会出现这种情况吗?

【问题讨论】:

  • 大多数 C++ 编译器可以告诉您任何给定语句的汇编级输出。看看机器级别发生了什么。编译器优化很难说一般情况下会发生什么,这是高度情境化的。
  • 它发生在序列点之间。除此之外,它何时发生是未指定的。
  • 取决于您系统的架构或机器。后增量x++ 可以在内部占用两个机器周期(MOV,INC),也可能只需要一个机器周期(INC),具体取决于处理器。

标签: c operators


【解决方案1】:

它发生在序列点之间。

除此之外,它何时发生是未指定的。

想象一下

x = y = z = 42
; // sequence point A
n = x++ + y++ + z++
; // sequence point B

接下来。 A点x、y、z都是42;在序列点 B,它们都是 43。不管你关心的是,编译器可以发出代码来同时更新所有 3 个变量。

// pseudo code
n = 126;
[vector increment][x,y,z];
//n = 126;

【讨论】:

  • 此外,依赖于任何更具体排序的代码具有未定义的行为。这些部分的规范参考当然是Why are these constructs using pre and post-increment undefined behavior?
  • 除此之外,它不是未指定的。根据 C 2018 6.5.2.4,值计算在副作用之前排序。但我不知道是否有一个表达式以一种不明显的方式有意义地影响评估。
猜你喜欢
  • 2021-01-25
  • 2021-06-29
  • 1970-01-01
  • 2018-11-07
  • 2019-03-26
  • 1970-01-01
  • 1970-01-01
  • 2020-05-10
  • 2014-03-22
相关资源
最近更新 更多