是的我读了关于序列点的文章.但是我无法理解为什么++i = 2会调用未定义的行为?i不管是什么,最终的值都是2,那么为什么表达式是ub?
代码段
int main()
{
int i =0;
++i=2;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
对不起,我的英语不是很好.
Bin*_*ier 11
它看起来很明显的话,因为显然 i会首先被分配i+1,然后第二个被分配的值2.
但是,这两个赋值都发生在同一个序列点中,因此它由编译器发生,并且发生在第二个,因此不同的编译器实现可以生成将给出不同结果的代码,因此它是UB.
你观察它的值将是你要求什么,这是UB如何可以在其他可能的方案中体现出来.该程序可能会输出您的预期,输出一些不相关的数据,崩溃,损坏数据或花费您所有的钱订购披萨.一旦C++标准说某些构造是UB,你就不应该指望任何特定的行为.观察到的结果可能因程序运行而异.