スタックの最上位要素への参照に混乱しています。
#include <iostream>
#include <stack>
using namespace std;
int main()
{
stack<int> s;
s.push(1);
int x = s.top();
int& y = s.top();
const int& z = s.top();
cout << x << '\t' << y << '\t' << z << endl;
s.pop();
s.push(2);
cout << x << '\t' << y << '\t' << z << endl;
}
/* Output:
1 1 1
1 2 2
*/
一番上の要素への参照は変更すべきではないと思っていましたが、新しい要素がスタックにプッシュされた後、参照が参照する値が変更されます。
int
タイプがスタック用ではない場合、タイプがMyClass
(非常に大きなデータ)であると言うと、古い最上位要素を安全に参照する方法があるので、これは私には奇妙です。(コストのかかるコピー操作をしたくないため)。
この動作は実装に依存する可能性があると思います。