【问题标题】:Why does this program output 4, instead of 3? [duplicate]为什么这个程序输出 4 而不是 3? [复制]
【发布时间】:2014-05-21 16:04:50
【问题描述】:
int main()
{
   int var = 1;
   var += ++var;
   cout<<var;
   return 0;
}

在 Java 中,这将按预期输出 3,但在 C++(上)中,它输出 4。为什么?

【问题讨论】:

  • @SeanBright 很多小狗会因为我们的学习目的而受苦=\
  • 我认为我在任何情况下都没有见过var += ++var;..
  • Java 具有用于评估此类表达式的明确定义的语义,因此您得到的结果在那里是可预测的,正如您所注意到的。对于 C++(或 C)来说,情况并非如此。

标签: c++


【解决方案1】:

因为这是未定义的行为。您正在修改和访问同一个变量而没有插入序列点,因此结果实际上取决于编译器。如果你用 clang 编译它,你会看到:

unsequenced modification and access to 'var'

我实际上得到 4 作为答案,但它同样可能是 3、7、123125123 或“龙虾”。

【讨论】:

  • 我不认为“龙虾”的可能性相同......但要点:-)
  • 只是为了进一步解释:var += ++var 被指定为与var = var + ++var 相同,因此顺序问题将是“在var + ++var 中,首先评估哪一侧?”如果首先评估左侧,则评估左侧时 var 不会增加。如果首先评估右侧,则左侧将在我们评估时增加。 Java 说表达式是从左到右计算的。 C++ 没有指定顺序,而是说具有这种歧义的代码没有任何已定义的行为。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-05-31
  • 2021-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-06
  • 1970-01-01
相关资源
最近更新 更多