一段代码值得千言万语。
#include <iostream>
#include <type_traits>
using namespace std;
struct A
{
int a;
};
struct B : A
{
int b;
};
int main()
{
cout << is_standard_layout<B>::value << endl; // output false! WHY?
return 0;
}
答案 0 :(得分:7)
从标准布局类的定义(§9类,第7段)
[...]
*要么在大多数派生类中没有非静态数据成员,要么最多只有一个带有非静态数据成员的基类,或者没有带有非静态数据成员的基类,并且 [...]
在您的案例中,派生程度最高的类及其基类都具有非静态数据成员。所以这不是标准布局。