C++ 一个包含两个int(并且只有两个int)的结构是否保证是sizeof(int)的两倍大?

C++ 一个包含两个int(并且只有两个int)的结构是否保证是sizeof(int)的两倍大?,c++,memory,struct,C++,Memory,Struct,假设我定义了一个结构: struct intpair { int i1; int i2; /*Other non-virtual members can go here*/ }; < > >代码> SigeOf(INTION) >由C++标准保证为 2×sieof(int)< /代码>如果不能保证,是否有任何编译器或情况不能满足此要求?通常情况下,它的大小就是这样。但为了确保这一点,请添加一个静态断言: static_assert(sizeof(intpair) ==

假设我定义了一个结构:

struct intpair
{
    int i1;
    int i2;
    /*Other non-virtual members can go here*/
};

< > >代码> SigeOf(INTION)<代码> >由C++标准保证为<代码> 2×sieof(int)< /代码>如果不能保证,是否有任何编译器或情况不能满足此要求?

通常情况下,它的大小就是这样。但为了确保这一点,请添加一个静态断言:

static_assert(sizeof(intpair) == sizeof(int) * 2, "Unexpected struct size");

如果断言触发,您可以从头开始寻找解决方案。否则,你会没事的。(顺便说一句,你为什么需要这个?

通常,它会有那个尺寸。但为了确保这一点,请添加一个静态断言:

static_assert(sizeof(intpair) == sizeof(int) * 2, "Unexpected struct size");

如果断言触发,您可以从头开始寻找解决方案。否则,你会没事的。(顺便说一句,你为什么需要这个?

不保证,但在每一个像样的编译器上可能都是如此。你可以把一个
static_assert
放进去。高度相关:@raket1111对meNo来说似乎是一个复制品,这是不能保证的。这在一个病态的编译器下是不成立的,它故意试图打破标准中没有支持的假设。不能保证,但可能在每一个体面的编译器上都是正确的。你可以把一个
static_assert
放进去。高度相关:@raket1111对meNo来说似乎是一个副本,这是不能保证的。这在一个病态编译器下是不成立的,它故意试图打破标准中没有支持的假设。那么填充呢?允许编译器在成员之间插入填充。这使得大小>=2*sizeof(int)。填充呢?允许编译器在成员之间插入填充。这使得大小>=2*sizeof(int)。