Как выглядят кадры стека, когда две функции лежат в одной строке?

Например, у нас есть

int p(void) {
return 4;
}

int q(void) {
return 5;
}

int main(void) {
int x = p() + q();
return 0;
}

Как выглядит кадр стека в этом случае? Точнее, оцениваются ли p и q одновременно, или после того, как p впервые оценено как 4, программа переходит к q?

1

Решение

из сравнения

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

Есть исключения из этого правила, которые отмечены ниже.

За исключением случаев, указанных ниже, не существует понятия слева направо или
оценка справа налево в C ++. Это не следует путать с
ассоциативность операторов слева направо и справа налево:
выражение f1 () + f2 () + f3 () анализируется как (f1 () + f2 ()) + f3 () из-за
ассоциативность слева направо оператора +, но вызов функции к F3
может оцениваться первым, последним или между f1 () или f2 () во время выполнения

4

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

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector