Conosco la differenza tra const e constexpr. Uno è una costante di tempo di compilazione e l'altro è o tempo di compilazione o costante di runtime.const constexpr char * vs. constexpr char *
Tuttavia, per la matrice di caratteri/stringhe, sono confuso perché il compilatore si lamenta del fatto che uno sia utilizzato rispetto all'altro.
Per esempio io ho:
constexpr char* A[2] = {"....", "....."};
const constexpr char* B[2] = {"....", "....."};
Con dichiarazione "A" ottengo:
ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
ma con dichiarazione di "B" ottengo nessun avviso.
Perché il qualificatore di cost extra elimina l'avviso? Non sono entrambi "const char *" comunque? Chiedo perché entrambi sono dichiarati con constexpr
che dovrebbe renderlo un const char*
per impostazione predefinita?
mi aspetto un andare bene: S
'constexpr' si applica al puntatore, rendendolo' const', ma non l'oggetto a cui punta. Quindi questo è uno dei pochi casi in cui potrebbe essere necessario combinare 'const' e' constexpr'. – 0x499602D2
'constexpr char *' è un 'char * const'. L'identificatore 'constexpr' si applica all'intero tipo dell'oggetto - cioè, si applica alla dichiarazione-,' const' è un qualificatore (di un tipo). – dyp