Ich kenne den Unterschied zwischen const und constexpr. Einer ist eine Kompilierzeitkonstante und der andere ist entweder Kompilierzeit oder Laufzeitkonstante.const constexpr char * vs. constexpr char *
Allerdings, für Array von Zeichen/Strings, bin ich verwirrt, warum der Compiler beschwert sich über eines verwendet wird über den anderen.
Zum Beispiel habe ich:
constexpr char* A[2] = {"....", "....."};
const constexpr char* B[2] = {"....", "....."};
Mit Erklärung "A" erhalte ich:
ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
aber mit der Erklärung "B" Ich habe keine Warnungen erhalten.
Warum wird der zusätzliche const-Qualifier die Warnung los? Sind beide nicht "const char *"? Ich frage, weil beide mit constexpr
deklariert sind, die es standardmäßig zu einem machen sollte?
Ich würde A erwarte in Ordnung zu sein: S
"constexpr" gilt für den Zeiger und macht ihn "const", aber nicht das Objekt, auf das er zeigt. Dies ist einer der wenigen Fälle, in denen Sie "const" und "constexpr" kombinieren müssen. – 0x499602D2
'constexpr char *' ist ein 'char * const'. Der "constexpr" -Spezifizierer gilt für den gesamten Typ des Objekts - das heißt, er gilt für die Deklaration -, "const" ist ein Qualifikationsmerkmal (eines Typs). – dyp