如何使用可执行文件在机器级别区分 cpp 中的私有和公共变量?
How the private and public variables in cpp are distinguished at machine level using the executable file?
我们都对 C++ 中的私有和公共变量有所了解。是否有任何机制可以在机器级别区分私有和公共成员? 如果数据成员可以通过使用成员的地址来访问,那么为什么要在C ++编程中使用私有和公共。
>C++中的私有和公共完全是编译时概念;它们在运行时不会以任何方式强制执行。类及其语义只是告诉编译器以某种方式将数据放在内存中的蓝图;在运行时,只有字节的数据和代码通过一些给定的偏移量访问它们。
如果数据成员可以通过使用成员的地址来访问,那么为什么要在C ++编程中使用私有和公共。
这里有两个很大的误解;首先,它们需要通过地址访问,即使是"从外部",否则类无法向其客户提供对其私有字段的引用(此外,不清楚内联将如何工作)。1
但最重要的是,C++访问控制不是安全问题。私有和公共的重点是建立接口和实现细节的分离(从而帮助客户端不要将对象置于逻辑不一致的状态,或者依赖于可能会更改的实现细节),而不是使不受信任的代码无法访问数据;源代码中的代码(甚至只是在进程中运行)被假定为不是敌对的。
毕竟,如果我真的想访问某个库的私人数据,我可以编辑标题并添加friend
声明,或者做一个#define private public
,或者(使用一些模板技巧来合法访问它。
- 请注意,这只是想到的第一个也是最明显的例子。即使你可以设计一种机制来跟踪从类的"内部"获得的地址(这会给指针的语义带来很多其他问题),标准的彻头彻尾的要求,任何
T *
都可以安全地转换为unsigned char *
并作为sizeof(T)
unsigned char
数组读取(参见C++11 §1.7 ¶1, §3.9 ¶4, §3.10 ¶10),这样就把棺材里的钉子钉在了这种保护机制上。
相关文章:
- 内置函数可查看CPP中的成员变量
- Cpp-Tuple使用带有变量的get
- 在 .h 文件中的类中声明静态变量和在.cpp文件中声明"global"变量有什么区别
- 从另一个 cpp 文件更改结构内、映射键内的变量
- 可以在 cpp 文件中C++定义为特殊符号的变量β
- 如何使用可视化代码和平台IO将环境变量注入CPP文件?
- 在.cpp文件之间传递全局字符串变量?
- 访问从 CPP 文件到其他头文件的静态变量
- 检查cpp文件中是否使用了变量
- 访问类成员的成员变量时 cpp 程序挂起
- 在 CPP 中初始化 typedef 结构变量
- 为什么我的.cpp文件无法解析 .h 文件中声明的变量?
- 动态变量 cpp 编译
- 如何在Qt cpp的SQlite数据库中插入变量的值
- 在 Cpp 标头中声明的常量变量应具有多少个符号条目
- 无法从.cpp访问 .h 文件中的私有成员变量
- PHP-CPP 扩展,它跨页面保留变量的值
- 如何从QT中的另一个CPP文件中访问CPP文件中的变量
- 通过引用 cpp 中的变量占用的内存
- 在变量(cpp)中切换文件