Страницы

Поиск по вопросам

суббота, 8 февраля 2020 г.

Приоритет операций и iostream

#cpp #c


Есть стек, реализованный на массиве. Почему при выполнении данного кода получаем
в результате "12", если же написать "cout" в разных строках то получаем "21"? Буду
очень благодарен за объяснение или статью где можно почитать об этом.      

#include 

using namespace std;

struct stack
{
    int size = 0;
    int st[1024];
};
void push(stack &st, int data)
{
   if(st.size >= 1024)
      cout<< "Stack Overflow!\n";
   else
   {
      st.st[st.size] = data;st.size++;
   }
}
int pop(stack &st)
{
    if(st.size>=0)
    {
        --st.size;
        int data = st.st[st.size];
        return data;
    }
    else cout<< "Stack Underflow!\n";
}

int main()
{
   stack mainstack;
   push(mainstack, 1);
   push(mainstack, 2);
   cout<< pop(mainstack)<


Ответы

Ответ 1



В данном случае порядок вызова функций pop() не определён, они не вызываются слева-направо, а так как решит компилятор. Точно так же, как и в выражении f() + g() что вызовется f() перед g() или наоборот в стандарте не говорится - всё решается компилятором. Порядок вычисления

Комментариев нет:

Отправить комментарий