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产生不同的产量?
您的pogram无效(未定义的行为),因此编译器可以生成任何内容.
问题是您在语句中多次分配单个变量(与序列点有关).
a=a++;
Run Code Online (Sandbox Code Playgroud)
因此应该是:
a++;
Run Code Online (Sandbox Code Playgroud)