maggior parte del tempo vedo costanti C-stringhe definite come:Modo corretto per definire una costante C-string in C++?
static char const* MY_CONSTANT = "Hello World";
Tuttavia, il puntatore in sé non èconst
. Non sarebbe più appropriato farlo come sotto?
static char const* const MY_CONSTANT = "Hello World";
Ci sono 2 obiettivi con globali costanti come questo, penso:
- Non consentire la modifica della stringa
- Non consentire la variabile per puntare a qualsiasi altra cosa
Ho semplicemente pensato che questi 2 obiettivi fossero necessari per definire stringhe costanti.
Un'altra cosa interessante è che mi è permesso di fare questo:
int main()
{
auto MY_CONSTANT = "";
MY_CONSTANT = "Another String";
}
Questo mi dice che auto
deduce la stringa come char const*
e non char const* const
.
Così ho due domande principali:
- Qual è il modo più appropriato per definire costanti stringhe c-style (suppongo costanti puntatori a qualcosa, è la questione più generale?). Perché scegli l'una o l'altra?
- Per quanto riguarda il mio esempio con
auto
, ha senso perché scegliechar const*
(perché è la matrice di dati che è costante, non il puntatore stesso). Posso fareauto
dedurre achar const* const
o posso cambiare il codice per farlo risultare in tale tipo?
Non si vuol dire 'const char * const'? – Adam
@Adam Entrambi i moduli sono C++ validi. La tua fa la stessa cosa della mia. –
il valore predefinito che "auto" rileva è la restrizione minima, il che significa che il fatto che la variabile non possa essere riassegnata è solo una tua scelta. puoi fare 'auto const' suppongo, se vuoi, ma è meglio non imporlo a tutti. –