在C ++中,如果我有一个类:
class Foo {
public:
int a;
char b;
private:
char c;
};
这是否意味着当a
的实例被分配时,b
必须在内存中Foo
旁边?
我已经阅读了一些标准here (n4296),我发现的唯一语言是
具有相同访问权限的(非联合)类的非静态数据成员 控制(第11条)被分配,以便后来的成员有更高的 类对象中的地址。
因此,这种语言听起来并不排除像" a,c,b"而不是" a,b,c"甚至" c,a,b"正如你所料。
我搜索了contiguous
这个词,有趣的是在标准中只出现了21次,但我觉得他们可能会用不同的术语来描述这个想法"两个字段排列在这样的他们之间没有其他领域的方式。"
答案 0 :(得分:2)
你引用的那一行之后的那一行回答了这个问题:
具有不同的非静态数据成员的分配顺序 访问控制未指定。实施一致 要求可能导致两个相邻成员不被分配 紧接着彼此
因此,根据编译器的实现,彼此相邻声明的两个字段可能会或可能不会“彼此相邻”。