“i++我知道一点了。是先赋值在+1”
------ 都是谭浩强的祸,C/C++标准根本就没有规定什么先后。
按标准,i++ 这个表达式返回i的原先值,副作用是i自增1。
而副作用发生的时刻,按标准只需要在下一个序列点之前完成即可。
举例:
int i = 0;
int a = i++;
既可能 a先初始化为0,而后i变为1,也可能 i先变为1,而后a初始化为0。(仅限于C标准,而C++标准已经修改了相关的规定)
根据以上内容
int i = 0;
int a = (i++) + (i++);
因为没法确定i自增的时刻,那么结果可能是0,也可能是1 ?!
不,C/C++规定在同一个序列期间,多次修改同一个变量属于未定义行为(可以简单的将未定义行为看成是编译器从来没考虑过这种情况,出错了活该)。