2011-11-11 12 views
6

Occasionaly, ho fatto un errore di battitura in un unico luogo di codice del mio programma:Posso davvero inizializzare un array con parentesi tonde?

int a = 10; 
char* b = new char(a); 

errore è ovvio: ho scritto() al posto di []. La cosa strana è ... codice compilato ok, ha funzionato nel debugger ok. Ma compilato .exe al di fuori del debugger si è schiantato un attimo dopo che la funzione con queste linee è stata eseguita.

La seconda riga di codice è davvero legittima? E se lo è, cosa significa compilatore?

risposta

10

È un singolo carattere con il valore numerico a, in questo caso 10. I puntatori non puntano solo agli array, sai.

5

Si sta assegnando un singolochar e assegnandogli un valore da a. Non sta allocando affatto una matrice.

E 'lo stesso di chiamare il costruttore in un'espressione new per qualsiasi altro tipo:

std::string* s = new std::string("foo"); 
int* i = new int(10); 
std::vector<std::string>* v = new std::vector<std::string>(5, "foo"); 
2

char t(a) crea un char locale inizializzato al valore di a.
new char (a) crea un char allocato dinamicamente inizializzato sul valore di a.

Problemi correlati