变量是否在结构中并排声明?

时间:2016-11-23 08:59:14

标签: c++ memory

我确信数组元素是连续存储的,但如果我声明了这样的内容:

class A {
    public:
    int a, b, c;
    // or
    int a;
    int b;
    int c;
}

会员是否连续存放?我一直在想是否有可能将变量存储在来自另一个进程的ab的声明之间,因此它不是连续的。但我不确定。有保证吗?

1 个答案:

答案 0 :(得分:2)

a bc保证在结构中按此顺序排列。

但是,通常,在任何两个struct成员之间可能存在结构填充。通常,对于仅包含int成员的结构,不会有填充,但最好不要做出这样的假设。

您可以在编译时检查:

static_assert( sizeof(A) == 3 * sizeof(int),  "oops, A had padding" );