И делает f(x)+(g(y))
можете убедиться, что позвонить g(y)
первый?
Я знаю, что порядок выражения не определен во многих случаях, но в этом случае работает ли скобки?
Скобки существуют, чтобы переопределить приоритет. Они не влияют на порядок оценки.
Смотри, мама, две строчки!
auto r = g(y);
f(x) + r;
Это вводит все важные точка последовательности между двумя вызовами функций. Могут быть и другие способы сделать это, но этот способ кажется простым и очевидным. Обратите внимание, что ваши скобки не вводят точку последовательности, поэтому не являются решением.
Нет, если +
оператор переопределен, подобные вещи оцениваются слева направо. Даже если бы вы могли повлиять на приоритет оператора, это не обязательно означает, что f
а также g
были оценены в том же порядке. Если тебе надо f
подлежит оценке до g
, вы всегда можете сделать:
auto resultOfF = f(x);
auto resultOfG = g(x);
resultOfF + resultOfG;