+ =运算符链接(带有少量UB)

0 c pointers chaining undefined-behavior

我知道在分号之前没有序列点,但对于在表达式中使用旧值2的解引用指针是否有合理的解释?

或者它可以简单地作为未定义的行为放下?

int i=2;
int *x=&i;
*x+=*x+=i+=7;
Run Code Online (Sandbox Code Playgroud)

结果:

i= 13
Run Code Online (Sandbox Code Playgroud)

Jam*_*lis 7

这是"简单"未定义的行为.

也就是说,编译器可能会发出读取i一次值然后执行所有算术的代码,然后存储新值i.

找出真正解释的明显方法是查看编译器生成的程序集.