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 :

[C++0x] nullptr expliqué en vidéo


Sujet :

Contribuez C++

  1. #21
    Membre chevronné
    Inscrit en
    Août 2004
    Messages
    556
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 556
    Par défaut
    Bon ben c'est bien beau tout ça, mais j'ai une question.

    sera valide ou pas ?

    Parce que d'un côté il y a le n2431 qui dit que nullptr ne sera convertible implicitement que vers des pointeurs, et de l'autre je me bat sur Wikipedia avec quelqu'un qui persiste à dire que c'est convertible vers bool, et il m'a filé une source que j'ai pas réussi à comprendre.

    While the original proposal specified that an rvalue of type nullptr should not be convertible to bool, the core language working group decided that such a conversion would be desirable, for consistency with regular pointer types. The proposed wording changes were unanimously voted into the Working Paper in June 2008.
    et il a mis comme source: http://www.open-std.org/jtc1/sc22/wg...008/n2697.html

    Sauf que je comprend rien à ce papier, en fait. Je comprend qu'ils pensent à la compatibilité avec bool, mais j'arrive pas à décortiquer l'information de tout le reste de ce qui a été voté.

    edit: j'ai trouvé ça: http://www.open-std.org/jtc1/sc22/wg...2008/n2656.htm

    Donc apparemment, nullptr -> bool sera ok.

    Mais je ne comprend pas l'intérêt, en fait.

    Sachant que dans la précédente proposition, ceci était valide:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int* a = nullptr;
    if( a == nullptr ) // évalué à vrai
    Je vois pas en quoi une convertion vers bool apporte, en fait. C'est pas comme si je suis contre non plus, mais bon.

    Tant que ça appelle bien une surcharge de pointeur et non de bool et que c'est guaranti par le standard...

  2. #22
    Rédacteur
    Avatar de Bakura
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2005
    Messages
    1 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 386
    Par défaut
    D'parès la vidéo, non. A un moment il fait un petit schéma et dit très clairement que nullptr n'est convertible QUE vers un T *, et rien d'autre.

    Le mieux serait de tester mais je n'ai pas Visual 2010 sur ma machine ici .

    Goten : Effectivement, je comprenais pas très bien le début de la vidéo

  3. #23
    Membre Expert
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Par défaut
    Dans vs nullptr n'est convertible que vers T* ... et rien d'autres!

  4. #24
    Membre Expert
    Avatar de Klaim
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2004
    Messages
    1 717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 717
    Par défaut
    Je vois pas en quoi une convertion vers bool apporte, en fait. C'est pas comme si je suis contre non plus, mais bon.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Truc* getMachin(); // return nullptr;
     
    bool is_machin_available = getMachin();
     
     
    // plein de code ...
     
    if( is_machin_available )
    {
     // on fait quelque chose
    }
    else
    {
     // on fait autre chose
    }
    Ce genre de code doit être utilisé et doit certainement être gardé comme valide pour retro-compatibilité.

    Personnellement j'écrirais ça autrement mais c'est pas impossible qu'il y ait une bonne grosse base de code qui marche comme ça.

  5. #25
    Membre Expert
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Par défaut
    Si tu renvoies un nullptr, c'est que tu changes ton code... Donc bon, en changeant tu dois bien te dire : ah ouai mais là ça va pas le faire. Donc tu gardes le NULL old school.

  6. #26
    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 : 51
    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
    Par défaut
    Citation Envoyé par Goten Voir le message
    Si tu renvoies un nullptr, c'est que tu changes ton code... Donc bon, en changeant tu dois bien te dire : ah ouai mais là ça va pas le faire. Donc tu gardes le NULL old school.
    Et tu ne bénéficies donc pas des autres avantages de nullptr... Franchement, je préfère qu'il soit convertible en bool...
    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.

  7. #27
    Membre Expert
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Par défaut
    Citation Envoyé par JolyLoic Voir le message
    Et tu ne bénéficies donc pas des autres avantages de nullptr... Franchement, je préfère qu'il soit convertible en bool...
    Certes, mais en tout cas le gars de la vidéo est clair, un nullptr n'est convertible uniquement qu'en T*. Rien d'autre.
    Et j'ai pas de draft C++0x sous la main pour regarder, mais c'est à vérifier en effet.

  8. #28
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    n2914 (de juin dernier) :

    4.12 Boolean conversions
    An rvalue of type std::nullptr_t can be converted to an rvalue of
    type bool; the resulting value is false.

  9. #29
    Membre Expert
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Par défaut
    Ca semble plus logique. Faudra que je re-regarde la partie concerné de la vidéo pour voir si c'est moi qui est mal compris, ou lui qui a sauté certains détails.

  10. #30
    Rédacteur
    Avatar de Bakura
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2005
    Messages
    1 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 386
    Par défaut
    Si je me souviens bien dans la vidéo, il dit qu'il y a une exception avec 0, et je crois que nullptr est aussi convertible en 0 (et uniquement cet entier).

  11. #31
    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 : 51
    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
    Par défaut
    Il précise dans la vidéo un truc genre "Et vers bool, mais pour simplifier la discussion, on va faire comme si ce n'était pas le cas".

    Par contre, il n'est pas convertible en 0. C'est 0 qui est convertible en nullptr (tout comme il est actuellement convertible en T*, alors que 1 ne l'est pas).
    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.

  12. #32
    Membre Expert
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Par défaut
    J'ai regardé la vidéo y'a un petit moment, et depuis j'ai dormi alors^^. Autant pour moi.

  13. #33
    Rédacteur
    Avatar de Bakura
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2005
    Messages
    1 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 386
    Par défaut
    D'accord, merci dse précisions Loic .

  14. #34
    Membre chevronné Avatar de Lavock
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 560
    Par défaut
    Ce passe quoi dans le cas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    void f(bool) {...}
    void f(void*) {...}
    ...
    f(nullptr);
    Si ça doit être gérer, je dis chapeau bien bas !

  15. #35
    Membre Expert
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Par défaut
    Citation Envoyé par 3DArchi Voir le message
    n2914 (de juin dernier) :
    Dans la proposition originale, c'était pas le cas :

    Citation Envoyé par n2431-1.pdf
    A object of type nullptr_t can be converted to any pointer or pointer-to-member type by a standard conversion. It cannot be converted to any other type (including any integral or bool type), cannot be used in arithmetic expression, ...
    ref : http://www.open-std.org/jtc1/sc22/wg...2007/n2431.pdf


    @lavock : y'a ambiguïté là, le compilo s'en sortira pas. (ou alors y'a un tricks que je voit pas).

  16. #36
    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 : 51
    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
    Par défaut
    A priori, je dirais que la conversion nullptr => T* est plus prioritaire que la conversion nullptr => bool, et qu'il n'y a pas d'ambiguïté. Mais je n'en mettrait pas ma main à couper.
    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.

  17. #37
    Membre Expert
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Par défaut
    Ouai, j'y est pensé, mais j'ai préféré ne pas trop m'avancer ayant la flemme de chercher dans la doc hier soir.



    edit : Ah ben si en faites je m'étais avancé... -_- xD

Discussions similaires

  1. Bit Blueprint publie une vidéo « L'Open Source expliqué pour tous »
    Par Malick dans le forum Logiciels Libres & Open Source
    Réponses: 0
    Dernier message: 03/04/2014, 00h29
  2. extraire une portion audio d'une vidéo
    Par Brunoo dans le forum DirectX
    Réponses: 2
    Dernier message: 16/06/2003, 10h29
  3. Une déclaration pour la survie du jeu vidéo en France
    Par Freakazoid dans le forum DirectX
    Réponses: 1
    Dernier message: 30/10/2002, 14h31
  4. [Composants][Animation] Lire une vidéo compressée
    Par femtosa dans le forum Composants VCL
    Réponses: 6
    Dernier message: 03/09/2002, 08h03
  5. Vitesse de la mémoire vidéo
    Par Anonymous dans le forum x86 16-bits
    Réponses: 3
    Dernier message: 06/06/2002, 20h20

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