Есть код
#include <iostream>
using namespace std;
int num = 0;
int foo()
{
return ++num;
}
int main()
{
cout << foo() << ' ' << foo() << endl;
return 0;
}
Вот что мне не понятно:
cout << foo() << ' ' << foo() << endl; //Выводится "2 1"
и
cout << foo() << ' ';
cout << foo() << endl; //Выводится "1 2"
В последней ситуации все ясно, но вот первую я не пойму (непонятен именно вывод).
Во-первых, начиная с "классического" С++98 и до С++17 порядок вычисления подвыражений в этом примере не специфицирован. Поэтому никакого "как по действиям это происходит" тут нет и быть не может. По мере продвижения через С++11 и С++14 требования порядка ужесточались, но все равно их еще было недостаточно для того, чтобы вывод этого примера стал специфицированным.
Во-вторых, начиная с С++17 должно выводиться именно "1 2", но для этого нужно соответствие компилятора требованиям С++17.
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости