2013-03-19 19 views

risposta

14

Il tipo di stringa letterale "Hello" è "vettore di 6 constchar".

I valori letterali di stringa ordinaria e i valori letterali di stringa UTF-8 sono anche indicati come letterali stringa stretti. Una stringa stretta letterale è di tipo “vettore di nconst char”, dove n è la dimensione della stringa [...]

Può tuttavia essere convertito in un const char* mediante array-to - conversione del punto. La conversione da matrice a puntatore produce un puntatore al primo elemento dell'array.

+0

Questo probabilmente spiega perché questo codice mostra un avvertimento 'C4172 che restituisce l'indirizzo della variabile locale o temporaneo'per questa funzione' const char * const & f() {return "ciao"; } 'in VS2010. Sei d'accordo con questo? – Belloc

+1

@ user1042389 Il puntatore risultante dalla conversione da matrice a puntatore è un oggetto temporaneo. Si sta restituendo un riferimento a quell'oggetto, in modo tale che il riferimento venga lasciato penzolare. –

+0

Dov'è il temporaneo? "ciao" esiste nella memoria statica! – Belloc

4

Lo standard lo definisce come "matrice di n const char", quindi è const char[n] (n è la dimensione della stringa, incluso il byte NUL di chiusura).

sezione 7, § 2.14.15:

Una corda stretta letterale ha tipo “array di n const char”, dove n è la dimensione della stringa come definito di seguito, ed ha durata di conservazione statica.

Problemi correlati