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

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

举个例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#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++编译器怎么编译出了这个效果?? - 知乎


c++数据可见性只针对名字而不是实际的对象
https://jcdu.top/2021/09/13/c++数据可见性只针对名字而不是实际的对象/
作者
horizon86
发布于
2021年9月13日
许可协议