我对堆栈顶部元素的引用感到困惑。
#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
(非常大的数据),有没有办法安全地引用旧的顶部元素?(因为我不想进行昂贵的复制操作)。
我猜这种行为可能是依赖于实现的,签名!