代码之家  ›  专栏  ›  技术社区  ›  Mohamad Alhamoud

i+++i的结果是什么?[副本]

c++
  •  3
  • Mohamad Alhamoud  · 技术社区  · 14 年前

    可能重复:
    Could anyone explain these undefined behaviors (i = i++ + ++i , i = i++, etc…)

    #include <iostream> 
    using namespace  std ;
    void myFunction(int i)
    {
        i = i + 2 + ++i;
        cout<<i<<endl;
    }
    
    void main () 
    {
        int i = 2;
        myFunction(i);
        cin>> i;
    }
    

    我认为结果应该是7而不是8…我使用的是Visual Studio 2008

    5 回复  |  直到 8 年前
        1
  •  18
  •   Dijkstra    14 年前

    此表达式右侧术语的求值顺序

    i = i + 2 + ++i;
    

        2
  •  13
  •   David Thornley    14 年前

    你在改变 i 在一个语句中引用两次,并且以一种与更改它无关的方式引用它的值。这是未定义的行为,没有一个正确的答案。

        3
  •  4
  •   Edward Strange    14 年前

    未指定的行为。它可以是任何价值。不允许在单个序列点中多次修改变量。

        4
  •  -1
  •   Burton Samograd    14 年前

    ++i在所有其他语句之前执行,因此 i + 2 + ++i 结果是(i=2) 3 + 2 + 3 也就是8。

        5
  •  -1
  •   Jay    14 年前