std :: cout语句评估顺序

A_M*_*tar 0 c++ stack

pop()函数有什么问题,为什么它不能正常工作?

class stack{
    int *p, *Cursor;
    int size ;
public:
    stack(int sz) {Cursor = p = new int[size=sz+1];} //consider the stack empty when its size is 1
    ~stack() {delete[] p;} //Cursor and P will be destroyed when the program finishes
    void push(int x) {Cursor+=1; *Cursor=x; size++;}
    int pop() {if(Cursor == p) return -1; int temp = *Cursor; Cursor--; size--; return (temp);}
    bool isEmpty(){return(Cursor == p);}
    bool isFull(){return(Cursor == p+size);}
};
Run Code Online (Sandbox Code Playgroud)

这是我的测试:

stack A(3);
    std::cout<<"Empty: "<<A.isEmpty()<<std::endl;
    std::cout<<"Full: "<<A.isFull()<<std::endl;
    A.push(10);
    A.push(20);
    A.push(30);
    std::cout<<std::endl;
    std::cout<<" 1st pop: "<<A.pop()<<std::endl<<" 2nd pop: " <<A.pop()<<std::endl<<" 3rd pop: " <<A.pop()<<std::endl<<" 4th pop: " <<A.pop()<<std::endl;
Run Code Online (Sandbox Code Playgroud)

我得到的输出是:

1st pop: -1
2nd pop: 10
3rd pop: 20
4th pop: 30
Run Code Online (Sandbox Code Playgroud)

虽然我应该得到......

1st pop: 30
2nd pop: 20
3rd pop: 10
4th pop: -1
Run Code Online (Sandbox Code Playgroud)

问题是我哪里出错了?

Bau*_*gen 5

什么都没有出错,但pop如果你把它们全部放在std::cout一行中,那么从右到左评估s(在你的情况下).一般来说.评估订单未指定.有关详细信息,请参阅此处.

因此,您可以按照与插入相反的顺序正确获取元素,然后-1将它们反转打印.