使用 auto & 进行类型推导
type deduction with auto &
今天我写了一些处理二叉树的代码。后来我注意到代码中的一个错误:
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()
怎么样?
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*
.
今天我写了一些处理二叉树的代码。后来我注意到代码中的一个错误:
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()
怎么样?
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*
.