如果stack.top()返回一个引用,那么为什么这段代码不起作用呢?

Dun*_*can 1 c++ struct stl

我试图窥视我的堆栈结构的顶部元素来改变它的属性:

stack<mat> stk;
...
mat parent = stk.top();
parent.cap -= n;
Run Code Online (Sandbox Code Playgroud)

但这并没有改变堆栈顶部的值.我认为这只是改变副本的价值.相反,我必须做这样的事情(我不确定它是否正确,但它有效):

stack<mat> stk;
...
mat * parent = &stk.top();
parent->cap -= n;
Run Code Online (Sandbox Code Playgroud)

我在引用中读到了stk.top()返回对栈顶部元素的引用,那么为什么我的第一个例子不起作用呢?

Joh*_*han 6

在这里,您将ref复制到一个新mat对象:

mat parent = stk.top();
Run Code Online (Sandbox Code Playgroud)

如果您想处理引用,请使用如下引用:

mat& parent = stk.top();
Run Code Online (Sandbox Code Playgroud)