【问题标题】:C++ Operator Precedence: GCC 5.2 vs Visual Studio 2015 [duplicate]C++ 运算符优先级:GCC 5.2 与 Visual Studio 2015 [重复]
【发布时间】:2015-11-10 12:06:30
【问题描述】:

让我们使用简单的 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++ Operator Precedence,赋值运算符 (=) 的优先级低于后递增。这表明第一个零分配给变量'a',之后'a'递增,所以在第一次迭代后a = 1。所以从VS 2015获得的结果是正确的。为什么 GCC 会产生不同的输出?

【问题讨论】:

    标签: c++ gcc operators visual-studio-2015


    【解决方案1】:

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

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

    a=a++;
    

    应该是这样的:

     a++;
    

    【讨论】:

      猜你喜欢
      • 2015-01-04
      • 1970-01-01
      • 2013-02-24
      • 2017-06-02
      • 1970-01-01
      • 2015-04-17
      • 2015-08-07
      • 1970-01-01
      相关资源
      最近更新 更多