Поскольку в C ++ 17 функции гарантированно вызываются слева направо, то есть сначала вызывается findCurrent()
, затем findLowest()
и т. Д.
C ++ 17 Стандартные ссылки: [expr.shift] / 4 (ссылается на выражение E1 << E2
):
Выражение E1
упорядочено перед выражением E2
.
[over.match.oper] / 2: (описание перегруженных операторов)
операнды упорядочены в порядке, установленном для встроенного оператора.
[intro.execution] / 15:
Выражение X
называется секвенированным перед выражением Y
, если каждый
Вычисление значения и каждый побочный эффект, связанный с выражением X
, упорядочивается перед каждым вычислением значения и каждым побочным эффектом, связанным с выражением Y
.
Ссылка на краткую справку
До C ++ 17 порядок вызовов функций был неопределен , что означает, что они могут быть вызваны в любом порядке (и этот порядок не должен быть одинаковым при повторных вызовах).