关于未定义的自增操作

P4557 [JSOI2018] 战争

@[龙潜月十五](/user/223989) 对于第一段代码,由于`cnt++` 和 `cnt-1` 的调用优先级没有标准的规定,所以在不同的环境下有可能调用的顺序不一样 这种情况被称作未定义行为 (UB)
by Priori_Incantatem @ 2021-06-15 15:01:34


@[Priori_Incantatem](/user/120362) 谢谢!
by 龙潜月十五 @ 2021-06-15 15:07:26


@[龙潜月十五](/user/223989) 理论上来讲是有明确顺序的,但当涉及到后置/前置自增/自减的时候,比如可以理解为 cnt++是先将cnt+1的值先存下来,再将cnt参与运算,再将cnt赋为cnt+1类似,但当cnt多次出现在表达式中,这个“赋值”的顺序并没有明确的定义,也就出现了“UB”,即不同环境下运行结果不同的事情
by linfourxu @ 2021-06-15 15:08:56


@[linfourxu](/user/50477) 明白了,感谢!之后自增自减还是要谨慎使用啊。
by 龙潜月十五 @ 2021-06-15 15:14:26


|