#include<iostream>
#include<stdio.h>
int main(){
int myVal = 0;
printf("%d %d %d\n", ++myVal,myVal,++myVal);
myVal = 0 ; /*reset*/
std::cout<<++myVal<<" "<<myVal<<" "<<++myVal<<std::endl;
return 0;
}
在两种情况下我得到输出2 2 2。怎么可能是2 2 2?我预计2 1 1或1 1 2
答案 0 :(得分:0)
实际上编译了预增量运算符,因此在调用printf和cout的表达式之前执行对它的所有调用。
就像你有:
int myVal = 0;
myVal += 1;
myVal += 1;
printf("%d %d %d\n", myVal, myVal, myVal);
也可以想象编译器优化可以使用常量'2'值,而不是在运行时执行增量。
编辑:diclaimer:这个答案试图解释OP代码中特别发生的事情,但它确实是未定义行为的一个例子,因为编译器可以在这种情况下做任何他们想做的事情。