C++运算符优先级:GCC 5.2与Visual Studio 2015

Krz*_*ski -2 c++ gcc operators visual-studio-2015

让我们采用简单的C++代码:

int main(){
    int a = 0;
    while(a<3) {
        a=a++;
        std::cout<<a<<std::endl;
    }  
}
Run Code Online (Sandbox Code Playgroud)

当g ++ 5.2.0进入无限循环并且仅打印零时,使用Visual Studio 2015打印1,2,3这个代码.

根据C++运算符优先级赋值运算符(=)具有较低的优先级,然后是后递增.这表明第一个零是赋值给变量'a',之后'a'递增,所以在第一次迭代之后a = 1.因此从VS 2015获得的结果是正确的.为什么GCC产生不同的产量?

Mar*_*ork 6

您的pogram无效(未定义的行为),因此编译器可以生成任何内容.

问题是您在语句中多次分配单个变量(与序列点有关).

a=a++;
Run Code Online (Sandbox Code Playgroud)

因此应该是:

 a++;
Run Code Online (Sandbox Code Playgroud)