5

一段代码胜过千言万语。

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

1 回答 1

8

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

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

在您的情况下,最派生类及其基类都具有非静态数据成员。所以这不是标准布局。

于 2012-12-16T10:39:33.823 回答