точки последовательности — ли «(f (x)) + g (y)» можете убедиться, что сначала вызовите f (x) в C ++?

И делает f(x)+(g(y)) можете убедиться, что позвонить g(y) первый?
Я знаю, что порядок выражения не определен во многих случаях, но в этом случае работает ли скобки?

4

Решение

Скобки существуют, чтобы переопределить приоритет. Они не влияют на порядок оценки.

24

Другие решения

Смотри, мама, две строчки!

auto r = g(y);
f(x) + r;

Это вводит все важные точка последовательности между двумя вызовами функций. Могут быть и другие способы сделать это, но этот способ кажется простым и очевидным. Обратите внимание, что ваши скобки не вводят точку последовательности, поэтому не являются решением.

12

Нет, если + оператор переопределен, подобные вещи оцениваются слева направо. Даже если бы вы могли повлиять на приоритет оператора, это не обязательно означает, что f а также g были оценены в том же порядке. Если тебе надо f подлежит оценке до g, вы всегда можете сделать:

auto resultOfF = f(x);
auto resultOfG = g(x);
resultOfF + resultOfG;
2
По вопросам рекламы [email protected]