Какая разница в печати функции со статическим int с одним std :: cout и несколькими std :: cout? - PullRequest
0 голосов
/ 27 июня 2018

Поэтому, когда у меня есть эта функция, и я печатаю ее на консоли с помощью нескольких операторов, я получаю ожидаемые результаты:

0

1

Но когда я распечатываю функцию только с помощью одного оператора cout в той же строке, я получаю:

3 2

(Это после начальных 0 и 1, которые были ранее напечатаны)

Почему печатается задом наперед?

#include "stdafx.h"
#include <iostream>

using namespace std;

int addOne()
{
    static int s_num = -1;
    return ++s_num;
}

int main()
{
    cout << addOne() << "\n";
    cout << addOne() << "\n";
    cout << addOne() << " " << addOne() << "\n";

    return 0;
}

1 Ответ

0 голосов
/ 27 июня 2018

Вы на самом деле натыкаетесь на неопределенное поведение. В этом контексте и любом другом таком контексте, где операторы имеют одинаковый приоритет, вызовы функций могут оцениваться в любом порядке. В этом случае компилятор решил оценить второй вызов функции перед первым, но другие компиляторы могли бы сделать это по-другому.

...