公共、私人和受保护的幕后

Or *_*aba 0 c++ oop object low-level private-members

我尝试更深入地了解 Public | 之间的差异。私人 | 在 C++ 中从低级角度保护。

三者的差异在记忆中表现如何?

for*_*818 5

privatepublic并且protected不会导致成员被存储在特定的内存区域中。访问由编译器检查。在最底层,没有区别。

但是,访问说明符确实会影响您对类成员在内存中的排列顺序的保证。

C++17 标准草案

分配具有相同访问控制(条款 [class.access])的(非联合)类的非静态数据成员,以便后面的成员在类对象中具有更高的地址。具有不同访问控制的非静态数据成员的分配顺序未指定(条款 [class.access])。实现对齐要求可能会导致两个相邻的成员不会立即被分配;管理虚拟函数 ([class.virtual]) 和虚拟基类 ([class.mi]) 的空间需求也是如此。

这意味着,对于

 struct foo {
     private:
        int x;
     protected:
        int a;
        int b;
     public:
        int m;
        int n;
     private:
        int y;
};
Run Code Online (Sandbox Code Playgroud)

你只得到了保证,在内存中x到来之前ya来之前bm来之前n。除此之外,未指定成员在内存中的排列顺序。

但是,内存中成员的顺序很少是有用的信息。因此,说访问说明符与“低级内存”无关并不太错。

  • 好吧,好吧,就这样:/sf/ask/4564104051/ (2认同)