为什么这个程序输出4而不是3?

use*_*747 -5 c++

int main()
{
   int var = 1;
   var += ++var;
   cout<<var;
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

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

Ada*_*ght 6

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

unsequenced modification and access to 'var'
Run Code Online (Sandbox Code Playgroud)

我实际上得到4作为答案,但它同样可以是3,7,123125123或"龙虾".

  • 我不会认为"龙虾"同样可能......但是采取了点:-) (2认同)