Статья Автор: Деникина Н.В., Деникин А.В.

Порядок вычисления аргументов функции

Спецификация C++ не определяет, сопоставляются ли аргументы с параметрами в порядке слева направо или справа налево. При копировании значений порядок не имеет значения. Однако если аргументы являются вызовами функций, это может быть проблематично:

someFunction(a(), b()); // a() или b() могут быть вызваны первыми

Если архитектура вычисляет слева направо, a() будет вызываться перед b(). Если архитектура вычисляет справа налево, b() будет вызываться перед a(). Это может иметь или не иметь последствий, в зависимости от того, что делают a() и b().

Если важно, чтобы какой-либо аргумент вычислялся первым, вы должны явно определить порядок выполнения, например:

int avar{ a() }; // a() всегда будет вызываться первой
int bvar{ b() }; // b() всегда будет вызываться второй
 
someFunction(avar, bvar); // не имеет значения, будет ли сначала скопировано avar или bvar, 
                          // потому что это просто значения
Печать