UB34
definition⚓︎
A side effect on a scalar object is unsequenced relative to either a different side effect on the
same scalar object or a value computation using the value of the same scalar object.
针对同一个标量对象,两个副作用的作用顺序不确定,或者一个副作用与一个求值的作用顺序不确定。
description⚓︎
给定一个表达式(Expression),Evaluation过程包括:
Value Computation (求值),即表达式的value(值+类型);
Initiation of Side Effect(确定副作用),即表达式造成的影响。
在下面 i = i++ 的例子中,表达式 i++ 的 Value Computation 是<0, int>, Side Effect 是 i 自增1;表达式i = i++ 的 Value Computation 是<0, int>,Side Effect 是 i 变为0。然而此处的两个 Side Effect 作用的先后顺序没有具体要求,那么赋0与自增的先后顺序不同会影响 i 的结果。
在下面 i = i + i++ 的例子中,表达式 i++ 的 Value Computation 是<0, int>, Side Effect 是 i 自增1;表达式 i 的Value Computation,若发生在 i 自增前则为<0, int>,若发生在 i 自增后则为<1, int>。此时求值与副作用发生的先后顺序会影响最终的结果。