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++编译器怎么编译出了这个效果?? - 知乎