根据我的经验,以下代码中的模式 2 几乎总是失败,而模式 1 总是成功。标准的哪一部分(如果有)可以保证这一点?
#include <iostream>
#include <cstdlib>
struct Data {
int a;
char b[5];
};
// Pattern 1
struct Base1 {
};
struct Derived1: Base1 {
int a;
char b[5];
};
static_assert(sizeof(Derived1)==sizeof(Data), "Pattern 1 failed");
// Pattern 2
struct Base2 {
int a;
char b[5];
};
struct Derived2: Base2 {
};
static_assert(sizeof(Derived2)==sizeof(Data), "Pattern 2 failed");
int main()
{
std::cout << "Hello, world!" << std::endl;
}
可以 Derived1
并且Data
被认为具有共同开始序列的结构吗?