gpt4 book ai didi

c++ - 如何使用可执行文件在机器级别区分cpp中的私有(private)变量和公共(public)变量?

转载 作者:搜寻专家 更新时间:2023-10-31 00:27:39 24 4
gpt4 key购买 nike

我们都对 C++ 中的私有(private)变量和公共(public)变量有所了解。是否有任何机制在机器级别区分私有(private)和公共(public)成员?如果数据成员可以通过使用成员的地址访问,那么为什么在 C++ 编程中使用私有(private)和公共(public)。

最佳答案

C++ 中的 private 和 public 完全是编译时的概念;它们在运行时不会以任何方式强制执行。类及其语义只是告诉编译器以某种方式将数据放置在内存中的蓝图;在运行时,只有字节的数据和代码可以使用一些给定的偏移量访问它们。

If the data members are accessible by using the addresses of the members then why to use the private and public in c++ programming.

这里有两个很大的误解;首先,它们需要即使是“从外部”也能通过地址访问,否则类无法向其客户提供对其私有(private)字段的引用(而且,内联如何工作尚不清楚).1

但最重要的是,C++ 访问控制不是安全问题。 private 和 public 的要点是建立接口(interface)和实现细节的分离(从而帮助客户不要将对象置于逻辑上不一致的状态,或者依赖于可能发生变化的实现细节),而不是使数据无法访问到不可信的代码;您源代码中的代码(甚至只是在您的进程中运行)被假定为不具有敌意。

毕竟,如果我真的想访问某个库的私有(private)数据,我只需编辑 header 并添加一个 friend 声明,或者执行一个 #define private public , 或 ( use some template trickeryaccess it legally


  1. 请注意,这只是第一个也是最明显的例子。即使您可以设计一种机制来跟踪从类的“内部”获得的地址(这将对指针的语义造成许多其他问题),标准完全强制要求任何 T *可以安全地转换为 unsigned char * 并作为 sizeof(T) unsigned char 的数组读取(参见 C++11 §1.7 ¶ 1, §3.9 ¶4, §3.10 ¶10), 这样就可以为这种保护机制敲定棺材了。

关于c++ - 如何使用可执行文件在机器级别区分cpp中的私有(private)变量和公共(public)变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48221191/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com