自动和类型推导

时间:2018-10-01 01:15:51

标签: c++11 auto type-deduction

今天我写了一些处理二叉树的代码。后来我注意到代码中的错误:

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 个答案:

答案 0 :(得分:0)

  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*