IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C++ Discussion :

Question const sur pointeur


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté Avatar de ManusDei
    Homme Profil pro
    vilain troll de l'UE
    Inscrit en
    Février 2010
    Messages
    1 624
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : vilain troll de l'UE

    Informations forums :
    Inscription : Février 2010
    Messages : 1 624
    Par défaut Question const sur pointeur
    Bonjour,

    j'ai une fonction de ce type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    fun(MA_STRUCT * const Panne){
     
    *Panne = VAR;
    }
    MA_STRUCT est un type struct (surprenant, n'est-ce pas ?), et VAR une structure par défaut.

    Le const signifie que le pointeur d'adresse ne sera pas modifié, mais que les valeurs à l'adresse pointée peuvent être modifiée, c'est bien ça ?

    Merci.

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 533
    Par défaut
    A titre de comparaison :

    const T* p <=> std::unique_ptr<const T>.
    T* const p <=> const std::unique_ptr<T>.

  3. #3
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    Type * const nom; Se lit pointeur constant sur un Type. Donc le pointeur est constant (on ne peut pas modifier sa valeur) contrairement à l'objet pointé.

    const Type * nom; Se lit pointeur sur un Type constant. Le pointeur pourra donc être modifié contrairement à l'objet pointé qui est considéré comme constant et qui ne pourra pas être modifié par le biais de ce pointeur.

  4. #4
    Membre émérite
    Avatar de Ekleog
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    448
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 448
    Par défaut
    Je me permettrai d'ajouter qu'il faudrait ajouter un gros panneau attention devant cette déclaration, parce que, justement, elle exploite un point assez méconnu de la norme. Et que mettre le pointeur const ne sert ici strictement à rien pour l'appelant.

  5. #5
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,

    Un petit rappel concernant le mot clé const :

    D'après la norme, il s'applique à ce qui se trouve à sa gauche, sauf (il s'agit donc bel et bien d'une exception à la règle ) s'il n'y a rien à sa gauche, auquel cas il s'applique à se qui se trouve à sa droite

    Quand ont déclare un pointeur, il y a donc quatre possibilités:
    1. Type * ptr un pointeur non constant sur vers un objet non constant de type Type : on peut aussi modifier l'adresse contenue par le pointeur (comprendre : le faire pointer sur un autre objet) que modifier l'objet pointé par le pointeur
    2. Type * const ptr un pointeur constant sur vers un objet non constant de type Type : on ne peut pas faire pointer le pointeur sur un autre objet, mais on peut, en revanche, modifier l'objet pointé
    3. Type * ptr const un pointeur non constant sur vers un objet constant de type Type : on peut pas faire pointer le pointeur sur un autre objet, mais on ne peut pas, en revanche, modifier l'objet pointé
    4. Type * const ptr const un pointeur constant sur vers un objet constant de type Type : on ne peut ni faire pointer le pointeur vers un autre objet, ni modifier l'objet pointé
    Par exception à la règle, il existe deux autres possibilités:
    1. const Type * ptr un pointeur constant sur vers un objet non constant de type Type : on ne peut pas faire pointer le pointeur sur un autre objet, mais on peut, en revanche, modifier l'objet pointé
    2. const Type * ptr const un pointeur constant sur vers un objet constant de type Type : on ne peut ni faire pointer le pointeur vers un autre objet, ni modifier l'objet pointé
    hope it helps
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  6. #6
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2012
    Messages : 21
    Par défaut
    Citation Envoyé par koala01 Voir le message
    Salut,

    Un petit rappel concernant le mot clé const :

    D'après la norme, il s'applique à ce qui se trouve à sa gauche, sauf (il s'agit donc bel et bien d'une exception à la règle ) s'il n'y a rien à sa gauche, auquel cas il s'applique à se qui se trouve à sa droite

    Quand ont déclare un pointeur, il y a donc quatre possibilités:
    1. Type * ptr un pointeur non constant sur vers un objet non constant de type Type : on peut aussi modifier l'adresse contenue par le pointeur (comprendre : le faire pointer sur un autre objet) que modifier l'objet pointé par le pointeur
    2. Type * const ptr un pointeur constant sur vers un objet non constant de type Type : on ne peut pas faire pointer le pointeur sur un autre objet, mais on peut, en revanche, modifier l'objet pointé
    3. Type * ptr const un pointeur non constant sur vers un objet constant de type Type : on peut pas faire pointer le pointeur sur un autre objet, mais on ne peut pas, en revanche, modifier l'objet pointé
    4. Type * const ptr const un pointeur constant sur vers un objet constant de type Type : on ne peut ni faire pointer le pointeur vers un autre objet, ni modifier l'objet pointé
    Par exception à la règle, il existe deux autres possibilités:
    1. const Type * ptr un pointeur constant sur vers un objet non constant de type Type : on ne peut pas faire pointer le pointeur sur un autre objet, mais on peut, en revanche, modifier l'objet pointé
    2. const Type * ptr const un pointeur constant sur vers un objet constant de type Type : on ne peut ni faire pointer le pointeur vers un autre objet, ni modifier l'objet pointé
    hope it helps
    Euh, y a pas une erreur ici ?
    Ce ne serait pas plutôt :

    • 1. ok
    • 2. ok
    • 3. Type const * ptr
    • 4. Type const * const ptr


    pareil pour les deux autre :

    • 1. const Type * ptr c'est l'inverse ici non, la variable pointée est constante, mais pas le pointeur (donc *ptr = tmp interdit, mais ptr = pointeur autorisé)
    • 2. const Type * const ptr


    Ou alors j'ai loupé quelque chose

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Question basique sur les pointeurs
    Par User Name dans le forum C++
    Réponses: 7
    Dernier message: 30/09/2013, 13h51
  2. questions générales sur pointeurs et classes/objets
    Par membreComplexe12 dans le forum C++
    Réponses: 5
    Dernier message: 09/09/2011, 23h24
  3. Réponses: 7
    Dernier message: 02/01/2008, 14h32
  4. question sur pointeur retourné par malloc()
    Par gauguin dans le forum C
    Réponses: 8
    Dernier message: 21/02/2007, 18h34
  5. Réponses: 4
    Dernier message: 16/11/2006, 02h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo