Sto guardando un codice di esempio per un'API che sto per iniziare a utilizzare. Il seguente schema mi ha un po 'confuso:C'è un motivo per usare const_cast su una stringa letterale in questo codice?
char* str;
str = const_cast<char*>("Hello World");
printf("%s ", str);
(. In realtà c'è un'istruzione case enorme in cui str
viene assegnato in ogni caso)
Nota che printf
prende const char*
. C'è qualche ragione ragionevole per questa conversione convoluta? Gli autori di questo codice stanno applicando molti trucchi orientati alla prestazione altrove, ma non c'è alcuna spiegazione per quello che sta succedendo qui.
Il mio istinto è quello di cambiare questo codice per:
const char* str;
str = "Hello World";
printf("%s ", str);
Mi sto perdendo qualcosa?
Sostituirlo. Il codice originale è pericolosamente vicino al terreno di comportamento non definito. –
Sì, 'puts' non fa esattamente la stessa cosa. Perchè 'puts' sarebbe una scelta migliore in altre situazioni? –
@ValekHalfHeart Oh, sì, era una sciocchezza, non importa. – Columbo