2016-11-23 2 views
0

ich sicher wissen, dass Array-Elemente werden zusammenhängend gespeichert, aber was, wenn ich so etwas wie dies erklärt:Sind Variablen nebeneinander in einem struct zusammenhängend deklariert?

class A { 
    public: 
    int a, b, c; 
    // or 
    int a; 
    int b; 
    int c; 
} 

die Mitglieder zusammenhängend gespeichert sind? Ich habe darüber nachgedacht, ob es eine Möglichkeit gibt, dass eine Variable zwischen der Deklaration a und b von einem anderen Prozess gespeichert wird, so dass es nicht zusammenhängend ist. Aber ich bin mir nicht sicher. Gibt es Garantien?

+0

FYI: http://stackoverflow.com/questions/4178175/what-are-aggregates-and-pods-and-how-why-are -they-special –

+0

FYI: http://Stackoverflow.com/a/15248697 – Jonas

+0

Woop okay, ich werde als duplikate für die Links markieren. @ n.m. weil ich es getestet habe und die adresse zusammenhängend ist, das verwirrt mich ein bisschen, denke ich. – Greffin28

Antwort

2

ab und c sind garantiert in dieser Reihenfolge in der Struktur zu sein.

Im Allgemeinen kann jedoch Strukturauffüllung zwischen zwei beliebigen Strukturelementen vorhanden sein. Normalerweise würde es keine Auffüllung für eine Struktur geben, die nur int Mitglieder enthält, aber es wäre gute Praxis, diese Annahme nicht zu machen.

Sie können dies überprüfen zur Compile-Zeit:

static_assert(sizeof(A) == 3 * sizeof(int), "oops, A had padding"); 
+0

Entschuldigung für die späte Antwort. Wie auch immer, danke, ich werde versuchen, es so zu vermeiden. – Greffin28

Verwandte Themen