5

A piece of code is worth a thousands words.

#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)

[...]
* 最も派生したクラスに非静的データ メンバーがなく、非静的データ メンバーを持つ基本クラスが最大 1 つあるか、非静的データ メンバーを持つ基本クラスがなく、
[...]

あなたのケースでは、最も派生したクラスとそのベースの両方に非静的データメンバーがあります。したがって、標準のレイアウトではありません。

于 2012-12-16T10:39:33.823 に答える