使用auto和显式指定私有结构的类型时的行为差异

时间:2016-05-23 06:17:37

标签: c++ c++11 type-deduction

请考虑以下代码段

class BST
{
    struct Node
    {
        int data_;
        Node * left_, * right;
    } * root_ = nullptr;

    public:

    Node * getRoot()
    {
        return root_;
    }
};

int main() {
    BST bst;
    auto root1 = bst.getRoot();          // Compiles fine
    BST::Node * root2 = bst.getRoot();   // Gives error
}

当获取值并分配给使用auto推导出类型的变量时,代码编译得很好。显式指定类型时,它会失败。为什么这种行为上的差异?我希望两者都失败。

1 个答案:

答案 0 :(得分:0)

问题是struct BST::Nodeclass BST内是私有的。请记住,class默认为所有成员的私人访问权限,而不仅仅是实例成员和函数。

使用auto很好,因为您从未明确提及私有类型。