Разница в отображении

79
20 июня 2021, 06:20

Почему между:

cout<<c.qget()<<" ";
cout<<c.qget()<<" ";

и:

cout<<c.qget()<<" "<<c.qget()<<" ";

есть разница в отображении? Не понимаю, почему значения меняются местами?

    #include <iostream>
    using namespace std;
    const int SIZE=100;
    template <class QType> class queue{
        QType q[SIZE];
        int sloc, rloc;
    public:
        queue(){sloc=rloc=0;}
        void qput(QType i);
        QType qget();
    };
    template <class QType>void queue<QType>::qput(QType i){
        if (sloc==SIZE){
            cout<<"Overload\n";
            return;
        }
        sloc++;
        q[sloc]=i;
    };
    template <class QType> QType queue <QType>::qget(){
        if (rloc==sloc){
            cout<<"Empty\n";
            return 0;
        }
        rloc++;
        return q[rloc];
    };
    int main(){
        queue <int> a,b;
        a.qput(10);
        b.qput(19);
        a.qput(20);
        b.qput(1);
        cout<<a.qget()<<" ";
        cout<<a.qget()<<" ";
        cout<<b.qget()<<" ";
        cout<<b.qget()<<endl;
        queue <double> c,d;
        c.qput(10.12);
        d.qput(19.99);
        c.qput(-20.);
        d.qput(0.986);
        cout<<c.qget()<<" ";
        cout<<c.qget()<<" ";
        cout<<d.qget()<<" ";
        cout<<d.qget()<<endl;
        system("pause");
    };
Answer 1

Потому что вы используете компилятор С++14 или ранее. Язык С++14 не давал вам никакой гарантии о том, в каком порядке будут делаться отдельные вызовы c.qget() в выражении

cout << c.qget() << " " << c.qget() << " ";

Это скорее вопрос к вам: раз уж вы пользуетесь С++14 (или ранее), то с чего это вдруг вы ожидаете какой-то предсказуемости вывода в этом варианте?

Начиная же с С++17 порядок вызовов и вывода зафиксирован жестко и оба ваших варианта дают один и тот же вывод.

READ ALSO
Анонимные параметры в С++

Анонимные параметры в С++

Заметил, что если сделать анонимный параметр, компилятор не будет ругаться на это

101
Как освободить порт если он занят

Как освободить порт если он занят

У меня есть программа она занимает порт 4001 если ее не отключать и запустить еще одну программу она будет выдавать ошибку пока порт не закроетсяВопрос,...

91
Ошибка с inline

Ошибка с inline

Подскажите, пожалуйста, с чем может быть связана эта ошибка линковки:

76