Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1030 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  const ou "pas const"

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

const ou "pas const"

n°1488878
Sve@r
Posté le 08-12-2006 à 20:33:32  profilanswer
 

Bonjour à tous
Je débute en C++. J'ai parcouru rapidement les post traitant de "const" mais il me reste un doute sur ma façon de programmer
Il m'arrive parfois d'écrire une fonction qui va traiter un truc. Pour l'exemple, on va dire "une chaîne". Donc ma fonction traite ma chaîne pour trouver qq chose et renvoie un pointeur sur l'endroit où se trouve ce qqchose (style "strstr" par exemple)
 
La fonction renvoyant un pointeur est déclarée "char*". De plus, la fonction ne modifiant pas la chaîne reçue ne paramètre, je déclare le paramètre "const char *", style

char *traitement (const char* chaine)
{
    const char* pt;        // Ptr de balayge de ma chaîne - L'élément pointé ne sera pas modifié donc "*pt" est déclaré "const"
    pt=chaine;
    <.... traitement long et complexe mais au final pt a la valeur qui m'intéresse ...>
    return pt;
}


 
Problème: Ma fonction est "char*" et non "const char*". Normal, elle me renvoie un truc qui lui, sera suceptible d'être modifié par l'appelant. Or, "pt" est un "const char*" le compilo râle.
Ok, je fais un cast => return (char*) pt
 
Question: Etant donné que généralement un cast traduit un problème de conception, ai-je mal conçu ma fonction ? Pourtant tout me parait cohérent. La fonction ne modifiant pas les éléments pointés, je les déclare en "const"...
 
J'espère avoir été clair.


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
mood
Publicité
Posté le 08-12-2006 à 20:33:32  profilanswer
 

n°1488887
++fab
victime du syndrome IH
Posté le 08-12-2006 à 21:13:06  profilanswer
 

Citation :

Je débute en C++. J'ai parcouru rapidement les post traitant de "const"


Note que const est aussi C99, mais avec une sémantique parfois différente.
 

Citation :

La fonction renvoyant un pointeur est déclarée "char*". De plus, la fonction ne modifiant pas la chaîne reçue ne paramètre, je déclare le paramètre "const char *", style

char *traitement (const char* chaine)
{
    const char* pt;        // Ptr de balayge de ma chaîne - L'élément pointé ne sera pas modifié donc "*pt" est déclaré "const"
    pt=chaine;
    <.... traitement long et complexe mais au final pt a la valeur qui m'intéresse ...>
    return pt;
}


 
Problème: Ma fonction est "char*" et non "const char*". Normal, elle me renvoie un truc qui lui, sera suceptible d'être modifié par l'appelant. Or, "pt" est un "const char*" le compilo râle.
Ok, je fais un cast => return (char*) pt


 
Tu fais pt=chaine; Si tu renvoies ce pointeur en cassant la "constness", tu brises le contrat que s'efforce de réaliser le compilateur, à savoir conserver "chaine" constante
 

Citation :

Question: Etant donné que généralement un cast traduit un problème de conception, ai-je mal conçu ma fonction ? Pourtant tout me parait cohérent. La fonction ne modifiant pas les éléments pointés, je les déclare en "const"...


Soit tu renvoies char const*, soit tu fais une copie de la chaine, et tu la renvoie à l'appelant.
 
utiliser std::string est largement moins complexe ;)

Message cité 1 fois
Message édité par ++fab le 08-12-2006 à 22:57:33
n°1488981
jesus_chri​st
votre nouveau dieu
Posté le 09-12-2006 à 10:45:41  profilanswer
 

++fab a écrit :

Citation :

Je débute en C++. J'ai parcouru rapidement les post traitant de "const"


Note que const est aussi C99, mais avec une sémantique parfois différente.


const est aussi ANSI-C. La plus grosse différence est que en C++ avec
static const int N = 42;
 
on obtient une constante littérale, qui peut servir de taille de tableau ou d'argument de template par exemple. En C ça reste une variable const.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  const ou "pas const"

 

Sujets relatifs
const devant une fonction[RESOLU] copie de const char*
include conditionnel + constparamètre "const"
C : Mettre une valeur numérique dans un const char[C++/résolu] donnée static const Pi=3.14
[C++] const / redéfinir un attribut d'une classeSupprimer "Public Const WSBase" ??
error: invalid operands of types 'const char [15]' and 'short ..string->const char* pas ok en mode debug
Plus de sujets relatifs à : const ou "pas const"


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR