La norme C ++ 11 (ISO / IEC 14882: 2011) dit dans § C.1.1
:
char* p = "abc"; // valid in C, invalid in C++
Pour le C ++, c'est OK car un pointeur vers un littéral de chaîne est dangereux car toute tentative de le modifier conduit à un crash. Mais pourquoi est-ce valable en C?
Le C ++ 11 dit aussi:
char* p = (char*)"abc"; // OK: cast added
Ce qui signifie que si un cast est ajouté à la première instruction, il devient valide.
Pourquoi le cast rend-il la deuxième instruction valide en C ++ et en quoi est-elle différente de la première? N'est-ce pas encore nocif? Si c'est le cas, pourquoi la norme dit-elle que c'est OK?
OK
.
const
, donc ils ne l'étaient pas nécessairement const
.
char[]
en premier lieu. Le second est unconst_cast
déguisé.