我们都对c ++中的私有变量和公共变量有所了解.是否有任何机制可以在机器级别区分私人和公共成员?如果可以使用成员的地址访问数据成员,那么为什么要在c ++编程中使用private和public.
C++中的私有和公共是完全编译时的概念; 它们在运行时不以任何方式强制执行.类和它们的语义只是告诉编译器以某种方式在内存中放置数据的蓝图; 在运行时,只有字节的数据和代码可以通过一些给定的偏移来访问它们.
如果可以使用成员的地址访问数据成员,那么为什么要在c ++编程中使用private和public.
这里有两个很大的误解; 首先,它们需要通过地址访问,甚至"从外部",否则一个类无法向其客户提供对其私有字段的引用(此外,还不清楚内联是如何工作的).1
但最重要的是,C++访问控制不是安全问题.私有和公共的关键是建立接口和实现细节的分离(从而帮助客户端不要将对象置于逻辑上不一致的状态,或依赖于可能发生变化的实现细节),而不是让不可信的数据无法访问码; 假设源代码中的代码(甚至只是在您的进程中运行)不具有敌意.
毕竟,如果我真的想访问某些库的私有数据,我可以编辑标题并添加friend声明,或者执行#define private public,或者(使用一些模板技巧来合法访问它).
T *可以安全地转换为unsigned char *和读取为数组sizeof(T) unsigned char(见C++11§1.71,§3.94,§3.1010),这样就可以将棺材放入这种保护机制中.