Since C++17 the functions are guaranteed to be called left-to-right, i.e. findCurrent()
is called first, then findLowest()
and so on.
C++17 Standard references: [expr.shift]/4 (referring to the expression E1 << E2
):
The expression E1
is sequenced before the expression E2
.
[over.match.oper]/2: (describing overloaded operators)
the operands are sequenced in the order prescribed for the built-in operator.
[intro.execution]/15:
An expression X
is said to be sequenced before an expression Y
if every
value computation and every side effect associated with the expression X
is sequenced before every value computation and every side effect associated with the expression Y
.
Link to cppreference summary
Prior to C++17 the order of function calls was unspecified, meaning that they may be called in any order (and this order does not need to be the same on repeated invocations).
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…