今天我写了一些处理二叉树的代码。后来我注意到代码中的错误:
void find(TreeNode* root, int target) {
stack<TreeNode*> myStack{{root}};
while(!myStack.empty()){
auto& top = myStack.top(); // here I used auto& by mistake
...
}
}
但是,我对auto& top = myStack.top();
感到困惑。在推导类型之后,top
的类型是什么?是TreeNode &
还是TreeNode* &
?
如果我使用auto* top = myStack.top()
怎么办?
答案 0 :(得分:0)
auto top = myStack.top();
将myStack.top()
的本地副本分配给top
。top
的类型将为TreeNode*
。 auto& top = myStack.top();
会将对myStack.top()
的引用分配给top
。top
的类型将为TreeNode*&
。 auto* top = myStack.top()
将myStack.top()
分配给top
。top
的类型将为TreeNode*
。