#include <iostream>
using namespace std;
class queue{
int q[100];
int sloc,rloc;
public:
void init();
void qput(int i);
int qget();
};
//初始化queue類
void queue::init()
{
rloc=sloc=0;
}
//將一個整數放入佇列中。
void queue::qput(int i)
{
if(sloc==100){
cout << "Queue is full.\n";
return ;
}
sloc++;
q[sloc]=i;
}
//從佇列中獲得一個整數
int queue::qget()
{
if(rloc ==sloc){
cout << "Queue underflow.\n";
return 0;
}
rloc++;
return q[rloc];
}
int main()
{
queue a,b;
a.init();
b.init();
a.qput(10);
b.qput(19);
a.qput(20);
b.qput(1);
//情況一:輸出為10,20;19,1
cout << a.qget()<< " " ;
cout << a.qget()<< endl;
cout << b.qget()<< " " ;
cout << b.qget()<< endl;
//情況二:輸出為:20,10;1,19
//cout << a.qget()<< " " << a.qget()<< endl;
//cout << b.qget()<< " " << b.qget()<< endl;
return 0;
}
有哪位可以幫忙詳細解釋一下情況一和情況二輸出結果不同的原因?
uj5u.com熱心網友回復:
這個也比較容易理解,在你這個運算式里,有2個qget()呼叫,但先計算哪個 qget() 是由編譯器決定的,不一定是寫在左邊的就先求值,實際專案中要避免寫出這種你無法控制的代碼:cout << a.qget()<< " " << a.qget()<< endl;
再舉一個類似的代碼:
c = a[++i] - b[++i];
同一個運算式里有2個 ++i,參與計算的a、b到底是哪個元素,就由編譯器來控制了,結果不一定符合你的預期。
不同運算式,C或C++按你寫的次序執行。
同一個運算式里,類似 fun( f1(x), f2(x) ) 這樣的運算式,f1、f2的求值次序是由編譯器決定的,f1不一定先求值
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/120978.html
標籤:基礎類
