Et on peut aussi cumuler les deux:
De plus, on ne peut pas directement copier un const char* vers un char* (il faut un cast), mais on peut toujours copier un char * const vers un char*.Code:const char * const ip;
Version imprimable
Et on peut aussi cumuler les deux:
De plus, on ne peut pas directement copier un const char* vers un char* (il faut un cast), mais on peut toujours copier un char * const vers un char*.Code:const char * const ip;
En effet.
Supprimer l'attribut const est généralement la marque d'une mauvaise conception. Personnellement, je ne fais ça que dans deux cas:
- Pour utiliser une bibliothèque dont le concepteur ignorait l'existance du mot const (et encore, généralement je préfère faire une copie de la chaîne, à tout hasard).
- Ou quand je dois faire une version const et une version non-const d'un même code, pour éviter de dupliquer plus que de raison.
Exemple avec strchr(), roue réinventée:
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13 const char * my_strchrC(const char *s, int c) { /* Code qui fait la même chose que strchr() */ } /* Notez bien l'ordre ici: C'est toujours la fonction non-const qui appelle la fonction const et caste LE POINTEUR RETOURNÉ. Jamais de cast sur les paramètres eux-mêmes. */ char * my_strchr(char *s, int c) { const char *pRet = my_strchrC(s, c); return (char*)pRet; }