Un truc que je ne comprends pas, c'est que le bout de code suivant compile:
char *ptr = "coucou";
Le Stroustrup me dit que les chaines littérales sont "const char*". Comment se fait-il que mon compilateur (g++ 3.2.2, VC6) ne bronche pas ? Normalement ne faudrait-il pas utiliser un "const_cast" ?
Si je fais:
char *ptr = "coucou"; // marche aussi avec un Toto*
const char *ptr2 = ptr;
g++ me donne:
invalid conversion from `const char*' to `char*'
Ce que je trouve normal.
Et vous qu'en pensez vous ?
Publicité
Posté le 10-05-2003 à 21:16:10
Taz
bisounours-codeur
Posté le 10-05-2003 à 21:19:16
ben c'est comme ça... c'est const, mais bon, je connais aucun compilo qui te jetera pour ça
Message édité par Taz le 10-05-2003 à 21:20:23
leneuf22
Posté le 10-05-2003 à 21:31:27
Imagine que ce soit vraiment respecté, tu devrais faire ça ?
Code :
char* ptr = (char*)"coucou";
(cast de const char* à char*)
Et donc ça serait un petit peu lourd à force
Ne nous plaignons pas !
Message édité par leneuf22 le 10-05-2003 à 21:32:56
Imagine que ce soit vraiment respecté, tu devrais faire ça ?
Code :
char* ptr = (char*)"coucou";
(cast de const char* à char*)
Et donc ça serait un petit peu lourd à force
Ne nous plaignons pas !
Non je ne trouve pas ça lourd. On n'est pas sensé caster des objets const en non-const, sauf dans le cas de biblios mal fichues. Alors quand ça arrive je prérère mettre un "const_cast", ça montre bien qu'il y a un problème.
ben c'est comme ça... c'est const, mais bon, je connais aucun compilo qui te jetera pour ça
Theoriquement l ecriture de char *str = "abc" n'est pas valide en C++ (ms valide en C)
le const "devrait" etre mis. Ms les compilos accepte car cette syntaxe n'est pas considérée comme vraiment invalide, simplement dépassée (en gros fodrait songer de nos jours ds un vrai prog a eviter d'ecrire ce genre de chose)
(cf standard C++ Annexe C.1.1.4, pour les kiffeurs)