2013-09-26 16 views
6

Esistono garanzie in C++ sull'ordine in cui vengono costruiti gli elementi dell'array?Elementi di array C++ ordine di costruzione

#include <iostream> 
using namespace std; 

struct A { 
    A() { cout << this << endl; } 
}; 

int main() 
{ 
    cout << "[0] is " << new A[3]; 
} 

stampe su

0x602010 
0x602011 
0x602012 
[0] is 0x602010 

che implica che gli elementi sono stati costruiti nella sequenza [0], [1] e [2]. L'ordine è garantito dalla lingua?

+1

array sono semplicemente posizioni contigue in memoria in cui ogni elemento dell'array si accede da ((posizione del primo elemento dell'array) + (pedice * sizeof (qualunque sia t sì è))), quindi direi di si – jonhopkins

+0

Sì. Ne ricaverei una risposta, ma poi dovrei cercare un riferimento, e non ho voglia di farlo adesso. –

risposta

11

Sì, che è garantito da C++ 11 12,6/3 ([class.init]/3):

Quando un array di oggetti di classe viene inizializzata (esplicitamente o implicitamente) e gli elementi sono inizializzato dal costruttore, il costruttore sarà chiamata per ogni elemento dell'array, seguendo l'ordine pedice

+0

Questa clausola è piuttosto importante per * distruzione * in caso di un'eccezione durante una delle costruzioni. –

+0

E, cosa più importante, vengono distrutti nell'ordine inverso. Ciò include se viene generata un'eccezione durante la costruzione. E.g: arr [0] è costruito, arr [1] è costruito, arr [2] gira durante la costruzione, arr [1] è destrutturato, arr [0] è destrutturato. –

Problemi correlati