Возвращение значений функции. Порядок

249
11 февраля 2018, 00:43

Есть код

#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"

В последней ситуации все ясно, но вот первую я не пойму (непонятен именно вывод).

Answer 1

Во-первых, начиная с "классического" С++98 и до С++17 порядок вычисления подвыражений в этом примере не специфицирован. Поэтому никакого "как по действиям это происходит" тут нет и быть не может. По мере продвижения через С++11 и С++14 требования порядка ужесточались, но все равно их еще было недостаточно для того, чтобы вывод этого примера стал специфицированным.

Во-вторых, начиная с С++17 должно выводиться именно "1 2", но для этого нужно соответствие компилятора требованиям С++17.

READ ALSO
C++: Преобразование текущего символа string в int

C++: Преобразование текущего символа string в int

Нужно сравнить два числа, количество цифр которых будет равняться вплоть до 10^6 (Тип данных записан как string)Какие помимо этого способа существуют...

273
Вызов C++ dll из python: builtins.OSError: [WinError 126] Не найден указанный модуль

Вызов C++ dll из python: builtins.OSError: [WinError 126] Не найден указанный модуль

Пытаюсь вызвать С++ dll с pythonВыдает такую ошибку:

243
Кавычки в C и C++

Кавычки в C и C++

Собственно хочу понять механизм того что происходит с компилятором в C и C++ если объявить символ вот так 'a' и вот так "a"Весь смысл изложен в этой...

257