为什么我们可以在类声明的私有部分中使用类型定义

时间:2017-09-20 10:21:09

标签: c++ c++11

认为私有部分中的那些定义(类,类型等的成员)是类本身的数据和类型。 但也有一些我不理解的例外情况。 例如,为什么在下面的示例中,C ++语言规则无法使用关键字auto?

来描述类型
class MyClassA 
{

    class MyClassB
    {
    public:
        MyClassB::MyClassB() {};

        MyClassB::~MyClassB() {};

        void get() const {};
    };

    MyClassB m_B;

    public:

        MyClassA() {};
    ~MyClassA() {};

    const MyClassB& get()
    {
        return m_B;
    }
};

 int _tmain(int argc, _TCHAR* argv[]) 
 {
    MyClassA classA;

    const MyClassA::MyClassB& ref1 = classA.get(); //! error C2248: 'MyClassA::MyClassB': cannot access private class declared in class 'MyClassA'

    const auto ref2 = classA.get(); //! OK, but why is it good here?

    ref1.get(); 

    return 1;
}

С++标准对此有何看法?

我正在使用MSVS2015(工具集v140)

开发代码

0 个答案:

没有答案