使用 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() 怎么样?

  1. auto top = myStack.top(); 会将 myStack.top() 的本地副本分配给 top
    在这种情况下,top 的类型将是 TreeNode*
  2. auto& top = myStack.top(); 会将对 myStack.top() 的引用分配给 top.
    在这种情况下,top 的类型将是 TreeNode*&
  3. auto* top = myStack.top() 会将 myStack.top() 分配给 top
    在这种情况下,top 的类型将是 TreeNode*.