Wann gelten 2 Typen als layout-kompatibel?



  • Hallo liebe Community,

    Ganz offesichtlich sind 2 Typen Layout-kompatibel, wenn sie gleich aufgebaut sind.

    struct { int x; };
    struct { int y; };
    

    Wie siehts jedoch hier aus (Man vernachlaessige Alignment und Padding)?

    struct { int x; };
    struct { short y[2]; };
    

    Oder diese beiden?

    struct { int x; };
    struct { void* p; };
    

    Gilt das auch als Layout-kompatibel, vorrausgesetzt die Typen sind gleich alignt, haben die selbe Menge an Padding und 2 * sizeof(short) == sizeof(int) bzw. sizeof(int) == sizeof(void*)?

    Gruessle,
    Der Kellerautomat



  • Kellerautomat schrieb:

    Man vernachlaessige Alignment und Padding

    Sind ein Dreieck und ein Quadrat das Selbe, wenn man die Zahl der Ecken und die Winkel vernachlässigt? 😉

    §9.2 schrieb:

    Two standard-layout struct (Clause 9) types are layout-compatible if they have the same number of non-static
    data members
    and corresponding non-static data members (in declaration order) have layout-compatible
    types (3.9)

    §3.9 schrieb:

    If two types T1 and T2 are the same type, then T1 and T2 are layout-compatible types.

    Dass zwei Typen gleich groß sind, heißt nicht, dass sie layout-compatible sind. Ein Pointer und ein int haben außer der Größe, und dass beide scalar-types sind. Ein short[2] und ein int haben nichts gemeinsam, außer unter Umständen die gleiche Größe und dass beides POD types sind.


Anmelden zum Antworten