c ++: Wie weit entfernt (in Bytes) sind Klassenmitglieder in einem Array?

8

Ich habe keinen besseren Weg gefunden, meine Frage so zu formulieren: Ist die Ausgabe unten immer wahr? ist das tragbar?

%Vor%

Was ist, wenn anstelle von vector , points ein rohe Array definiert wurde? Ist die Ausgabe immer noch wahr?

%Vor%     
user1235183 19.08.2015, 08:44
quelle

2 Antworten

5

Für std::vector sagt [vector.overview] / 1 (N3337):

  

Die Elemente eines Vektors werden zusammenhängend gespeichert, dh wenn v ein vector<T, Allocator> ist, wobei T ein anderer Typ als bool ist, dann wird die Identität &v[n] == &v[0] + n für alle 0 <= n < v.size() übernommen.

Also, das Verhalten Ihres Programms ist portabel und gut definiert.

Bei Arrays lautet [dcl.array] / 1:

  

Ein Objekt vom Typ Array enthält eine zusammenhängend zugeordnete, nicht leere Menge von N Unterobjekten vom Typ T .

Dies ist nicht ganz so explizit wie das vector Zitat, aber die Mitverwendung des Wortes "zusammenhängend" weist auf die Tatsache hin, dass die std::vector Speicheridentität auch für Arrays gilt.

    
TartanLlama 19.08.2015, 08:49
quelle
3

Ja, eine der Voraussetzungen für den Vektor ist, dass seine Elemente zusammenhängend gespeichert werden müssen.

Von n2798:

  

23.2.6 Klassenvorlagenvektor [Vektor]

     
    

1 Ein Vektor ist ein Sequenzcontainer, der einen wahlfreien Zugriff unterstützt     Iteratoren. Zusätzlich unterstützt es (amortisierte) konstante Zeit einfügen     und Löschoperationen am Ende; einfügen und löschen in der Mitte nehmen     lineare Zeit. Storage-Management wird automatisch behandelt, obwohl Hinweise     kann gegeben werden, um die Effizienz zu verbessern. Die Elemente eines Vektors sind     zusammenhängend gespeichert, was bedeutet, dass, wenn v ein Vektor ist, wo T etwas ist     type anders als bool, dann gehorcht es der Identität & amp; v [n] == & amp; v [0] + n     für alle 0 & lt; = n & lt; v.größe ().

  
    
Joyas 19.08.2015 08:49
quelle

Tags und Links