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

Contribuez C++ Discussion :

[FAQ][C++11] nullptr ou NULL


Sujet :

Contribuez C++

  1. #1
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut [FAQ][C++11] nullptr ou NULL
    Je propose d'ajouter un article de ce style dans la FAQ (il faudrait en plus faire une passe globale pour supprimer tous les NULL):

    Faut-il utiliser 0, NULL ou nullptr pour désigner un pointeur NULL ?

    À partir de C++11, il faut utiliser nullptr. Avant, les avis divergent.
    • 0 est avant tout un entier. Il se trouve juste que, quand il est converti en pointeur, il retourne le pointeur nul,
    • NULL est une macro équivalente à 0, qui ajoute donc aux problèmes de 0 les problèmes d'être une macro (a-t-on inclus un header qui la définit ? Et si elle a été définie autrement ?), mais est peut-être un peu plus clair dans son intention,
    • nullptr est la valeur du pointeur nul, directement supportée par le langage depuis C++11.

    L'intérêt d'un support direct du langage se voit particulièrement en cas de surcharge :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    void f(char* pc) { cout << "Avec un pointeur" << endl;}
    void f(int i)    { cout << "Avec un entier" << endl; }
     
    f(0); // Entier
    f(NULL); // Entier aussi
    f(nullptr); // Pointeur
    Des développeurs ayant modifié la définition de NULL dans du code historique pour la rendre équivalente à nullptr ont reporté que cette manipulation, parmi moult faux positifs, a permis de mettre en évidence certains bugs, qui ne seraient jamais apparus si nullptr avait pu être utilisé dès le début.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 764
    Points : 2 704
    Points
    2 704
    Par défaut
    À préciser : le type pointeur est en fait std::nullptr_t.

  3. #3
    Membre émérite
    Inscrit en
    Avril 2010
    Messages
    1 495
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 1 495
    Points : 2 274
    Points
    2 274
    Par défaut
    Citation Envoyé par JolyLoic Voir le message
    (il faudrait en plus faire une passe globale pour supprimer tous les NULL)
    Je profite de ce thread pour dire que sur "tous" les exemples de la FAQ, peut-être trop simplistes, il n'y a aucune gestion des erreurs. Si passe il y a, il serait probablement utile d'y penser aussi...

  4. #4
    Expert confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    1 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 711
    Points : 4 442
    Points
    4 442
    Par défaut
    Citation Envoyé par minnesota Voir le message
    Je profite de ce thread pour dire que sur "tous" les exemples de la FAQ, peut-être trop simplistes, il n'y a aucune gestion des erreurs. Si passe il y a, il serait probablement utile d'y penser aussi...
    Pas vraiment sûr que ce soit une bonne idée. Dans beaucoup de cas ça alourdi les exemples sans rien apporter de vraiment utile.

    Les exemples sont là pour montrer un point précis et aller à l'essentiel.

    (Et en poussant ça un peu plus loin, il faudrait fournir des tests unitaires pour les exemples )

  5. #5
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Citation Envoyé par oodini Voir le message
    À préciser : le type pointeur est en fait std::nullptr_t.
    Je pense que c'est une information intéressante, mais qui aurait plus sa place dans un autre point (quel est le type de nullptr ?). Il ne faut pas que la FAQ ressemble à une collection d'articles sur les différents points du langage, mais reste une FAQ : Des question précises, des réponses consises...

    Pour tout dire, je trouve déjà ma proposition d'article trop longue.
    Citation Envoyé par minnesota Voir le message
    Je profite de ce thread pour dire que sur "tous" les exemples de la FAQ, peut-être trop simplistes, il n'y a aucune gestion des erreurs. Si passe il y a, il serait probablement utile d'y penser aussi...
    Je suis du même avis qu'Iradille.
    Peut-être une question dessus dans la partie "meta" de la FAQ ? Genre : "Mais, vous ne gérez pas les erreurs dans vos exemples ?"
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  6. #6
    Membre expert

    Avatar de germinolegrand
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Octobre 2010
    Messages
    738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Octobre 2010
    Messages : 738
    Points : 3 892
    Points
    3 892
    Par défaut
    Bonjour,
    Je suis tout à fait d'accord, c'est une excellente idée .

    Pour ce qui est de la longueur, il vaut mieux une réponse de qualité qu'une réponse trop écourtée. La qualité viendra aussi des liens pertinents vers d'autres FAQ bien entendu.

  7. #7
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 275
    Points : 10 985
    Points
    10 985
    Par défaut
    Savoir quel est le type de nullptr n'apporte rien dans une FAQ. Un coup de google et on le trouve dans cppreference ou la norme, car on a déjà le mot clé (nullptr). Savoir comment choisir entre 0 et NULL et nullptr, ça ne vient pas immédiatement (quand on n'a pas le mot clé nullptr) et cela doit être, aujourd'hui, dans une FAQ. (j'étais opposé à toute réponse tranchée pour le C++03).

    Bref, je rejoins de l'avis de Loic: une FAQ doit répondre à des questions fréquemment posées si vous la voulez digeste.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

Discussions similaires

  1. "ALTERER" une col. NULL en NOT NULL - Int
    Par Gandalf24 dans le forum SQL
    Réponses: 2
    Dernier message: 28/12/2002, 00h07
  2. [FORMS] Chemin des icones (intégré FAQ 150 QR)
    Par jerome62 dans le forum Forms
    Réponses: 2
    Dernier message: 30/07/2002, 08h32

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