2012-12-16 57 views
4

一段代碼勝過千言萬語。爲什麼這個結構不是標準佈局?

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

回答

7

從標準佈局類的定義(§9類,第7段)

[...]
*或者具有在最派生類沒有非靜態數據成員和至多一個基類與非靜態數據成員,或具有與非靜態數據成員沒有基類,並
[...]

兩個最派生的類和其基地在你的情況下有非靜態數據成員。所以這不是標準佈局。

+0

其中有'B b; cout <<(reinterpret_cast (&b)==(&b.b))<< endl;'輸出false。 –

+0

@PeteKirkham:這與此有關嗎? '&b ==&b.a'應該在這裏輸出'true'。 –

+0

@MatthieuM .:是的,我相信皮特的評論是相關的。如果「B」是標準佈局,他的表達式將會輸出真值。 – Mat