int foo(int a, int& b, int c) {
int temp = a;
a = b;
b = c;
c = temp;
return a - b;
}
int main() {**foo(foo(a, b, c), b, foo(a, b, foo(a, b, c)));**return 0;
}
какой вызов функции foo оценивается первым и почему?
код, который я разместил, был упрощен, поэтому нет необходимости его отслеживать.
благодарю вас
Предполагая, что **
являются опечатками, а не синтаксическими ошибками, и используют следующие имена:
(A) (B) (C) (D)
foo ( foo(a, b, c), b, foo(a, b, foo(a, b, c)))
следствие верно:
Больше нельзя сказать, потому что стандарт C ++ позволяет упорядочивать оценку параметров компилятору:
5.2.2 / 4: Когда вызывается функция, каждый параметр должен быть инициализирован с соответствующим аргументом. [Примечание: такие
инициализации неопределенно упорядочены по отношению к каждому
другое — конечная нота]
Других решений пока нет …