Quoth
C++ standard 1.9.16:
When calling a function (whether or
not the function is inline), every
value computation and side effect
associated with any argument
expression, or with the postfix
expression designating the called
function, is sequenced before
execution of every expression or
statement in the body of the called
function. (Note: Value computations
and side effects associated with the
different argument expressions are
unsequenced.)
所以在我看来,这段代码:
foo(i++);
是完全合法的。它将递增i,然后调用foo与以前的值i。但是,这段代码:
foo(i++, i++);
产生未定义的行为,因为1.9.16段还说:
If a side effect on a scalar object is unsequenced relative to either another side effect on the same scalar object or a value computation using the value of the same scalar object, the behavior is undefined.