我想偷看我的結構體堆棧的頂部元素,以改變其屬性:如果stack.top()返回一個引用,那爲什麼這個代碼不工作?
stack<mat> stk;
...
mat parent = stk.top();
parent.cap -= n;
但這並不在堆棧的頂部更改值。我認爲這只是改變了副本的價值。相反,我不得不做這樣的事情(我不知道這是否是正確的,但它的工作原理):
stack<mat> stk;
...
mat * parent = &stk.top();
parent->cap -= n;
我在參考閱讀stk.top()
在堆棧的頂部返回元素的引用,那麼爲什麼我的第一個例子沒有工作?
'parent'不是參考... –
你應該在調用端使用一個引用以及...'mat&parent = stk.top();'... – 2013-11-24 20:59:24
在這一點上,我會就像爲這個初學者的錯誤指責使用過分口語的語言:函數從來沒有「返回引用」。相反,*評估一個函數調用表達式總是會產生一個值*,而這些值永遠不會是引用。區別在於函數的返回*類型*是否是引用,並相應地產生的值是左值還是右值。這聽起來更復雜,但避免了這樣的心理失誤。 –