C++运算符的优先顺序:GCC 5.2与Visual Studio 2015

C++ Operator Precedence: GCC 5.2 vs Visual Studio 2015

本文关键字:Visual 2015 Studio GCC 运算符 顺序 C++      更新时间:2023-10-16

让我们使用简单的C++代码,如:

int main(){
    int a = 0;
    while(a<3) {
        a=a++;
        std::cout<<a<<std::endl;
    }  
}

当g++5.2.0进入无限循环并只打印零时,使用Visual Studio 2015构建的这段代码将打印1、2、3。

根据C++运算符优先级分配,运算符(=)的优先级低于后增量。这意味着第一个零是对变量"a"的赋值,之后"a"递增,所以在第一次迭代后a=1。所以从VS 2015中得出的结果是正确的。GCC为什么产生不同的输出?

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

问题是在一个语句中多次为单个变量赋值(与序列点有关)。

a=a++;

因此应该是:

 a++;