是的,我阅读了关于 sequence points 的文章.但是我不明白为什么 ++i = 2
会调用未定义的行为? i
的最终值无论如何都会是 2,那么表达式怎么会是 ub?
代码片段
int main()
{
int i =0;
++i=2;
return 0;
}
对不起,我的英语不是很好。
最佳答案
这对你来说很明显,因为显然 i
将首先 分配给i+1
,然后< strong>second 被赋予值 2
。
然而,这两个赋值都发生在同一个序列点内,因此由编译器决定哪个先发生,哪个再发生,因此不同的编译器实现可以生成会给出不同结果的代码,因此它是 UB .
关于c++ - 另一个与序列点相关的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4246158/