Oui, en C++, vous devez toujours vous référer à des littéraux de chaîne avec des variables de type const char *
ou const char [N]
. C'est aussi des bonnes pratiques lors de l'écriture du nouveau code C.
Les littéraux de chaîne sont stockées dans la mémoire en lecture seule, lorsque cela est possible; leur type est correctement const
-qualifiés. C, mais pas en C++, comprend une compatibilité descendante verrue où le compilateur donne le type char [N]
, même si elles sont stockées dans la mémoire en lecture seule. C'est parce que les littéraux de chaîne sont plus âgés que l' const
de qualification. const
a été inventé dans la perspective de ce qui est maintenant appelé "C89" -- la précédente "K&R" forme de la langue n'en ont pas.
Certains compilateurs C comprennent une option de mode de compatibilité descendante verrue est désactivé, et char *foo = "...";
vous obtiendrez le même ou similaire diagnostic qu'il fait en C++. GCC sorts de ce mode -Wwrite-strings
. Je le recommande fortement pour le nouveau code; toutefois, de l'allumer pour l'ancien code est susceptible de nécessiter une quantité énorme de scutwork pour très peu d'avantages.