C++ 后缀增量是否对返回值执行增量不?
又是一个愚蠢的问题C++ 后缀增量是否对返回值执行增量不?,c++,standards,post-increment,C++,Standards,Post Increment,又是一个愚蠢的问题 #include <stdio.h> #include <iostream> using namespace std; int main() { int i = 0; i = i++; cout<<i; return 0; } #包括 #包括 使用名称空间std; int main() { int i=0; i=i++; cout i = i++; 如果一个表达式将两个不同的值赋值给变量,则C++规范说明任何事情都可能发生—
#include <stdio.h>
#include <iostream>
using namespace std;
int main()
{
int i = 0;
i = i++;
cout<<i;
return 0;
}
#包括
#包括
使用名称空间std;
int main()
{
int i=0;
i=i++;
cout
i = i++;
如果一个表达式将两个不同的值赋值给变量,则C++规范说明任何事情都可能发生——它可以继承它的旧值,这两个新值之一,或者几乎什么都可以。这是因为编译器允许编译器对简单表达式进行更积极的优化。ler可以重新安排赋值和++
的执行顺序,例如,如果它认为这样更有效。请提供标准的证明链接,为什么它没有定义?我猜是这样,但还没有找到证明。只有GCC在-Wall
模式下提供警告。即使没有你,结果也是一样的t优化并处于调试模式。@flashnik ISO/IEC 14882:2003§5(4):在上一个序列点和下一个序列点之间,标量对象的存储值最多应通过表达式的计算修改一次。