si può fare:
const char* yo2 = (char [4]) { 'a', 'b', 'c', '\0' };
che è valido e vi ottenere quello che vuoi. Si noti che non è equivalente a:
const char* yo2 = "abc":
Nel primo caso, quando yo2
è dichiarato al file portata: il composto array letterale ha una durata di stoccaggio statico ma quando yo2
viene dichiarato nel blocco-scope letterale composto ha durata della memorizzazione automatica.
In quest'ultimo caso, "abc"
è una stringa letterale e ha durata di archiviazione statica (ambito file o ambito del blocco).
È possibile anche utilizzare un array invece di un puntatore:
const char yo2[] = { 'a', 'b', 'c', '\0' };
Per quanto riguarda il tuo esempio. In C:
const char* yo2 = { 'a', 'b', 'c', '\0' };
non è valido e il compilatore interpreta come:
const char* yo2 = (char *) 'a';
Il valore di 'a'
non è un valore di puntatore (un indirizzo) in modo dereferenziazione yo2
invoca un comportamento indefinito.
No! Il RHS è temporaneo; non è garantito il mantenimento. – nneonneo
@nneonneo è un composto letterale. Ha una durata di archiviazione automatica se dichiarato nell'ambito del blocco. Ora perché il downvote per favore? – ouah
In C, sì. Ma questo diventa pericoloso non appena lo usi in C++, o lo compilo in modalità C++. Quindi non è una pratica sicura nei miei libri. – nneonneo