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.