为什么这个结构不是标准布局?

时间:2012-12-16 10:32:41

标签: c++ c++11 struct typetraits standard-layout

一段代码值得千言万语。

#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; 
}

1 个答案:

答案 0 :(得分:7)

从标准布局类的定义(§9类,第7段)

  

[...]
  *要么在大多数派生类中没有非静态数据成员,要么最多只有一个带有非静态数据成员的基类,或者没有带有非静态数据成员的基类,并且   [...]

在您的案例中,派生程度最高的类及其基类都具有非静态数据成员。所以这不是标准布局。

相关问题