Что запускается первым внутри оператора cout? (C ++ 17) - PullRequest
0 голосов
/ 16 мая 2018

Скажем, к примеру, у меня есть длинное утверждение типа

cout << findCurrent() << "," << findLowest() << "," << findHighest() << "," << findThird()<<"\n";

будет findCurrent() выполнено до findLowest(), как диктует логика?

Ответы [ 2 ]

0 голосов
/ 16 мая 2018

До C ++ 17, порядок оценки не указан .

Начиная с C ++ 17, он должен оцениваться слева направо. См. М.М. ответ для стандартной цитаты.

0 голосов
/ 16 мая 2018

Поскольку в 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 порядок вызовов функций был неопределен , что означает, что они могут быть вызваны в любом порядке (и этот порядок не должен быть одинаковым при повторных вызовах).

...