Kes*_*arg 1 c++ undefined-behavior post-increment
考虑这段代码
int j = 0;
int x = 0;
for(int i=0;i<5;i++){
j = x++;
cout<<x<<" ";
}
Run Code Online (Sandbox Code Playgroud)
输出:
1 2 3 4 5
现在考虑这个
int j=0;
for(int i=0;i<5;i++){
j = j++;
cout<<j<<" ";
}
Run Code Online (Sandbox Code Playgroud)
输出:
0 0 0 0 0
我的疑问是为什么j在分配 value 后没有增加0。不j=j++;等于j = j; j++;,如果不是,那么第一种情况会发生什么。我知道这是一个愚蠢的怀疑,但我自己无法弄清楚。
是不是 j=j++; 相当于 j = j; j++;
不绝对不是,这是对前后增量运算符最常见的误解之一。
真正的等价物j = j++;是
int temp = j;
++j;
j = temp;
Run Code Online (Sandbox Code Playgroud)
初学者认为后增量发生在其他一切之后。但事实并非如此。增量发生在取值之后,而不是在执行完语句的其余部分之后。你可以看到,在上面的代码,价值j取temp = j;,则增量发生++j;,则使用值j = temp;。
正如多次说过的,这段代码只有在 C++17 中有定义的含义,在此之前它是未定义的。