[C++] chaines littérales et const

chaines littérales et const [C++] - C++ - Programmation

Marsh Posté le 10-05-2003 à 21:16:10    

Bonjour,
 
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 ?

Reply

Marsh Posté le 10-05-2003 à 21:16:10   

Reply

Marsh 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
Reply

Marsh Posté le 10-05-2003 à 21:31:27    

Imagine que ce soit vraiment respecté, tu devrais faire ça ?

Code :
  1. 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
Reply

Marsh Posté le 10-05-2003 à 21:33:51    

leneuf22 a écrit :

Imagine que ce soit vraiment respecté, tu devrais faire ça ?

Code :
  1. char* ptr = (char*)"coucou";


(cast de const char* à char*)
 
Et donc ça serait un petit peu lourd à force :)
Ne nous plaignons pas !

ça c'est en C  :non:

Reply

Marsh Posté le 10-05-2003 à 21:48:42    

leneuf22 a écrit :

Imagine que ce soit vraiment respecté, tu devrais faire ça ?

Code :
  1. 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.

Reply

Marsh Posté le 10-05-2003 à 21:49:14    

...désolé !

Reply

Marsh Posté le 10-05-2003 à 22:16:06    

++Taz a écrit :

ben c'est comme ça... c'est const, mais bon, je connais aucun compilo qui te jetera pour ça


 
forte 6 si


---------------
From now on, you will speak only when spoken to, and the first and last words out of your filthy sewers will be "Sir!"
Reply

Marsh Posté le 10-05-2003 à 22:20:26    

  [:spamafote] de toutes façons tout et n'importe quoi compile alors...

Reply

Marsh Posté le 11-05-2003 à 00:54:14    

++Taz a écrit :

  [:spamafote] de toutes façons tout et n'importe quoi compile alors...


 
En C oui. En C++, c'est moins évident.

Reply

Marsh Posté le 11-05-2003 à 02:05:59    

++Taz a écrit :

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)

Reply

Marsh Posté le 11-05-2003 à 02:05:59   

Reply

Marsh Posté le 11-05-2003 à 07:06:17    

ToxicAvenger a écrit :


 
En C oui. En C++, c'est moins évident.

soit pas si sur de ça...

Reply

Marsh Posté le 12-05-2003 à 17:03:28    

++Taz a écrit :

soit pas si sur de ça...


 
on peut qd meme ecrire de sacré sapolerie en C  :whistle:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed