c++数据可见性只针对名字而不是实际的对象

一句话概括本文核心:C++的类型权限只是“名字、标识符”的可用性,并不是指这个对象底层的可访问性。

举个例子:

#include<iostream>
using namespace std;

class FunctorParam {
  private:
    class Unused {
      private:
        class Private {
         public:
          virtual void hello(){
              cout<<"hello world!"<<endl;
          }
        };
      public:
        typedef Private Type;
    };
  public:
    typedef Unused::Type Type;
};

这里,Unused和Private都是private的,无法被各自的外部访问。
但是,你在public中把把private的元素typedef出来,那么就可以用typedef的这个别名来访问private的元素了!
也就是说,private保护的只是这个名字,你给他起个public的别名就能被访问了。想想也正常,这只是c++的语法规定,方便大家封装,并不能在运行期起作用。

问题出处:
c++编译器怎么编译出了这个效果?? - 知乎

posted @ 2021-09-13 17:57  王冰冰  阅读(44)  评论(0编辑  收藏  举报