通过auto变量可以访问private innerclass

时间:2016-02-16 16:30:48

标签: c++ c++11

有人知道为什么这条线与auto&编译好吗? 我用clang 3.6(C ++ 17),GCC 5.2(C ++ 17),VS2013(update5)尝试了这个,他们都允许这样做。 我知道这个例子没有多大意义,但仍然为什么通过auto来区别?

当我在TD(类型显示器)中使用Scott Meyers技巧时,它向我显示auto& b的实际类型也是A :: B.那么,为什么差异呢?

#include <iostream>

using namespace std;

class A
{
private:
   class B
      {
      public:
         void x()
            {
            std::cout << "inside B::x()" << std::endl;
            }
      };

public:   
   B& getB() { return m_memberB; }

private:
   B m_memberB;
};

int main()
{
A a1;

//A::B& b = a1.getB();  // this doesn't compile  (A::B is private...)
auto &b = a1.getB();    // this compiles!
b.x();

return 0;
}

0 个答案:

没有答案