Спецификация 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,
// потому что это просто значения