编译器(GCC)如何处理C ++的访问控制?

时间:2016-12-14 20:39:29

标签: c++ gcc

我想知道GCC如何处理C ++代码的控制访问(公共,私有,受保护)。

e.g。

class X
{   
public: 
    int a;    
    void funcA(){};  
private:
    int b;
    void funcB(){};
protected:
    int c;
    void funcC(){};
};

当然,编译器首先会进行访问控制检查。 但是,我的问题是:

生成汇编代码(.s文件)或目标文件(.o文件)后,私有变量/函数/对象与汇编代码和ELF文件中的公共事物之间有什么不同?

编译器在编译期间如何设置代码的控制访问权限?

提前致谢!

2 个答案:

答案 0 :(得分:4)

访问控制严格来说是编译时的概念:如果源代码中的所有访问都没问题,那么代码就会编译。在运行时没有什么可以检查的,因此访问限定符对生成的代码没有影响。

答案 1 :(得分:1)

正如您所说,编译器将在最初编译时检查访问权限。

但是,一旦生成了目标文件,就可能没有检查。实际上,您可以在#define private public头文件之前执行#include,然后访问私有成员。

可能是某些奇怪的目标文件格式或某些编译器标志会试图使私有成员更难使用,但我希望所有方法都像#define技巧一样容易解决,特别是对于访问protected成员,就好像它们是public一样(因为它们需要可以被派生类访问)。