在C++编译中如何进行私有和公共访问

在C++编译中如何进行私有和公共访问,c++,g++,C++,G++,我知道public允许程序员访问成员、属性或其他类,private不允许访问 但我想知道,在编译g++的过程中,它实际上是如何工作的 我把我的问题解释得很糟糕。 我知道会产生什么效果,我只是想了解更多关于编译器将做什么的信息,允许公共或私有访问的操作。当您声明或定义一个对象时,编译器会创建包含该对象属性的某种内部记录。对于C++编译器,这些属性之一将描述成员对象的可访问性。然后,当编译器遇到试图访问成员的代码时,它会根据可访问性属性检查类的代码部分/派生类的代码部分/两者都不是的标识,以确定是否

我知道public允许程序员访问成员、属性或其他类,private不允许访问

但我想知道,在编译g++的过程中,它实际上是如何工作的

我把我的问题解释得很糟糕。
我知道会产生什么效果,我只是想了解更多关于编译器将做什么的信息,允许公共或私有访问的操作。

当您声明或定义一个对象时,编译器会创建包含该对象属性的某种内部记录。对于C++编译器,这些属性之一将描述成员对象的可访问性。然后,当编译器遇到试图访问成员的代码时,它会根据可访问性属性检查类的代码部分/派生类的代码部分/两者都不是的标识,以确定是否允许访问

不过,不可能深入到比这更详细的内容,因为编译器之间的细节会有所不同

如果你想进入一个非常详细的解释,特别是g++,这将变得困难和丑陋。问题是g++AST的代码是或至少最初是用C编写的,但树中的节点基本上是多态的。为了管理这个问题,他们有一个相当大的宏集来模拟类似于C++中的动态映射。每种类型的节点都会被分配一个ID,因此宏会检查节点是否包含正确的ID,以表示您尝试访问的类型,如果该类型正确,则允许您访问数据


在这些宏中,有许多谓词宏,可以让您查询特定节点是否具有某些特定属性。我已经很久没有看过了,我不能保证这一点,但如果内存可用,其中之一将允许您查询名称的可访问性。

+1:。选民们,请不要太苛刻。对于一个好奇的人来说,这似乎是一个有效的问题,只是,这需要关于编译器开发的大量细节,因此可能会偏离主题。@Abhijit这并不苛刻,只是简单地表达了这个问题不适合这样做。很难在一个有用的答案中解释和涵盖编译器实现必须考虑的所有方面。@Laykker这不是对效果的描述,他告诉你的是它是如何实现的:它归结为一个简单的if。哦,是的,明白了!Thx家伙!