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 :

1 rectification et transtypage d'une constante


Sujet :

C++

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Apprenti
    Inscrit en
    Décembre 2010
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Apprenti

    Informations forums :
    Inscription : Décembre 2010
    Messages : 86
    Points : 30
    Points
    30
    Par défaut 1 rectification et transtypage d'une constante
    Bonjour,

    j'ai 2 questions :

    1) d'abord je pense qu'il faut rectifier une phrase dans le cours en pièce jointe début page 4 , mais je souhaite avoir votre avis :

    La phrase telle qu'elle est écrite :

    Les fonctions qui ont un paramètre de type pointeur disposent parfois d'une valeur, par défaut permettant .....

    Ne serait-ce pas plutôt le pointeur qui peut avoir une valeur par défaut plutôt que la fonction ?


    2) Par ailleurs, je ne comprends pas la partie en gras , quelqu'un pourrait-il m'expliquer ou me renvoyer vers une explication simple (fichier pdf...), voici le passage, j'ai mis en gras, ce qui me déroute :

    Les fonctions qui ont un paramètre de type pointeur disposent parfois d'une valeur, par défaut permettant à l'appelant de ne pas s'inquiéter de ce paramètre lorsqu'il n'est pas pertinent. Dans la plupart des cas, cette valeur par défaut est la constante NULL, et la fonction comporte alors des fragments de code du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if (leParametre != NULL)
         * leParametre = resultat;
    Un effet analogue peut être obtenu avec un paramètre de type référence , dont la valeur par défaut peut être fixée en déréférençant explicitement un pointeur NULL obtenu par transtypage d'une constante; Dans le cas d'une référence à un int, nous écrirons donc par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void fonction (int & leParametre =*static_cast<int *>(NULL));
    Ceci est au début de la page 4 du fichier joint.

    Merci de votre aide.
    Images attachées Images attachées
    • Type de fichier : pdf L12.pdf (170,6 Ko, 177 affichages)

  2. #2
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 186
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 186
    Points : 17 126
    Points
    17 126
    Par défaut
    Pour le point 1, je pense que tu as raison.

    Pour le point 2, même si c'est possible, c'est affreux!
    Une référence est parfaite pour dire "doit être une valeur", si on veut un NULL, on utilise un pointeur, ou une surcharge de la fonction
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  3. #3
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    tech lead c++ linux
    Inscrit en
    Août 2004
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : tech lead c++ linux

    Informations forums :
    Inscription : Août 2004
    Messages : 4 262
    Points : 6 680
    Points
    6 680
    Billets dans le blog
    2
    Par défaut
    Ce qui n'est pas dit dans ton cours, c'est que le principal avantage du passage de paramètre par référence (par opposition au passage par pointeur) est que l'on est assuré, justement, que le paramètre est valide.

    Le hack donné dans ce cours permet de contourner cela: il permet de salir quelque chose de propre. Je ne suis d'ailleurs par certain que cela fonctionne sur tous les compilateurs, et je te conseillerais d'oublier ça au plus vite.
    « L'effort par lequel toute chose tend à persévérer dans son être n'est rien de plus que l'essence actuelle de cette chose. »
    Spinoza — Éthique III, Proposition VII

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Apprenti
    Inscrit en
    Décembre 2010
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Apprenti

    Informations forums :
    Inscription : Décembre 2010
    Messages : 86
    Points : 30
    Points
    30
    Par défaut
    Bonsoir,

    que veut dire déréférencer un pointeur NULL ?

    Merci d'avance

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

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 612
    Points : 30 611
    Points
    30 611
    Par défaut
    Salut,

    Honnêtement, ce cours, je me dépêcherais de le mettre à la poubelle si j'étais toi

    Le simple fait de constater qu'il date de 2003 d'une part, qu'il puisse proposer ce genre de choses d'autre part, et surtout qu'il puisse voire les pointeurs avant les références ne laisse rien présager de bon quant à son contenu, laissant, au mieux, à penser qu'il aborde C++ d'une manière honnies parmi toute qu'est l'approche "C with classes"
    Citation Envoyé par matlab_ Voir le message
    Bonsoir,

    que veut dire déréférencer un pointeur NULL ?

    Merci d'avance
    Comme tout pointeur, le déréférencement permet de récupérer ce qui est pointé par le pointeur.

    Le seul truc que le cours n'indique pas, c'est que, comme NULL est une adresse invalide, le fait d'utiliser le déréférencement mènera tout droit à un comportement indéfini, dans le meilleur des cas
    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 habitué
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 118
    Points : 158
    Points
    158
    Par défaut
    Norme C++11 Chapitre 8.3.2, point 5 :
    in particular, a null reference cannot exist in a well-defined program, because the only way to create such a reference would be to bind it to the “object” obtained by dereferencing a null pointer, which causes undefined behavior.

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Apprenti
    Inscrit en
    Décembre 2010
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Apprenti

    Informations forums :
    Inscription : Décembre 2010
    Messages : 86
    Points : 30
    Points
    30
    Par défaut
    Bonjour,

    dans ce cas, ce serait gentil de me proposer un cours de C++, complet, plutôt récent, et où toutes les notions sont bien détaillées et machées mais concis, et qui me permette de bien comprendre, un fichier pdf serait bien...

  8. #8
    Membre émérite
    Avatar de white_tentacle
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1 505
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Points : 2 799
    Points
    2 799
    Par défaut
    Va dans la section « Tutoriels c++ », (lien juste en bas), elle est faite pour ça

  9. #9
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 113
    Points : 32 958
    Points
    32 958
    Billets dans le blog
    4
    Par défaut
    Débuter (6 visiteur(s))
    Forum d'entraide pour débuter en langage de programmation C++. Avant de poster : cours d'initiation au C++
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

Discussions similaires

  1. Réponses: 17
    Dernier message: 03/10/2005, 12h16
  2. [Debutant]Definition d'une constante.
    Par GETah dans le forum Langage
    Réponses: 6
    Dernier message: 18/05/2005, 20h16
  3. Inclusion de fichiers et portée d'une constante
    Par Djakisback dans le forum C
    Réponses: 14
    Dernier message: 13/05/2005, 14h19
  4. ajout d'une constante dans un select
    Par Shabata dans le forum Langage SQL
    Réponses: 3
    Dernier message: 01/07/2004, 19h24
  5. Partage d'une constante entre 2 fichiers en C
    Par elsargento dans le forum C
    Réponses: 6
    Dernier message: 29/09/2003, 23h17

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