Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 4 sur 4
  1. #1
    Invité de passage
    Inscrit en
    décembre 2012
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : décembre 2012
    Messages : 11
    Points : 0
    Points
    0

    Par défaut conversion bool integer

    bonjour
    je débute tout juste en C++
    en travaillant sur les définitions des différents type j'ai appris que bool pouvait être converti en int et vice versa
    plus précisément les int différents de 0 sont des bool de valeur true et les bool true peuvent prendre en valeur int 1
    on enchaine en disant qu'un pointeur est facilement convertible en bool sachant qu'un pointeur non nul est converti en true et un pointeur nul en false
    j'ai envie de dire quel est l'intérêt??
    merci d'avance
    cordialement

  2. #2
    r0d
    r0d est déconnecté
    Expert Confirmé Sénior

    Profil pro
    Inscrit en
    août 2004
    Messages
    4 098
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : août 2004
    Messages : 4 098
    Points : 5 754
    Points
    5 754

    Par défaut

    Citation Envoyé par ezrider Voir le message
    j'ai envie de dire quel est l'intérêt??
    A vrai dire, je me suis toujours posé la question.
    J'ai l'impression que le seul intérêt de ces conversions est de pouvoir écrire du code sale. Des choses du style par exemple:
    Code :
    1
    2
    3
    MonObjet * objet = new MonObjet();
    if ( objet )
       objet->FaitQuelqueChose();
    Ecriture qui est déconseillée car trop peu explicite.

    Il y a peut-être derrière cela des histoires de compatibilités avec le C, ou peut-être des utilisations spécifiques dont j'ignore tout.
    Mais après 10 ans d'expérience en c++, je n'en ai jamais eu l'utilité, et je serais tenté de te conseiller d'oublier cette histoire.

    edit: à noter qu'avec le c++11, il est dorénavant préférable d'utiliser nullptr (à la place de 0 ou NULL). Tu trouveras un exemple directement en rapport avec ta question ici: http://www.cprogramming.com/c++11/c+...num-class.html

  3. #3
    Expert Confirmé Sénior

    Homme Profil pro Emmanuel Deloget
    Développeur informatique
    Inscrit en
    septembre 2007
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Nom : Homme Emmanuel Deloget
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : septembre 2007
    Messages : 1 894
    Points : 4 448
    Points
    4 448

    Par défaut

    Citation Envoyé par r0d Voir le message
    A vrai dire, je me suis toujours posé la question.
    J'ai l'impression que le seul intérêt de ces conversions est de pouvoir écrire du code sale. Des choses du style par exemple:
    Code :
    1
    2
    3
    MonObjet * objet = new MonObjet();
    if ( objet )
       objet->FaitQuelqueChose();
    Ecriture qui est déconseillée car trop peu explicite.

    Il y a peut-être derrière cela des histoires de compatibilités avec le C, ou peut-être des utilisations spécifiques dont j'ignore tout.
    Mais après 10 ans d'expérience en c++, je n'en ai jamais eu l'utilité, et je serais tenté de te conseiller d'oublier cette histoire.

    edit: à noter qu'avec le c++11, il est dorénavant préférable d'utiliser nullptr (à la place de 0 ou NULL). Tu trouveras un exemple directement en rapport avec ta question ici: http://www.cprogramming.com/c++11/c+...num-class.html
    L'écriture if (xxx) est tellement idiomatique que le standard C++11 a ajouté les opérateur de conversion explicite, et il l'a fait explictement pour implémenter les operator bool() qui apparaissent ici et là dans le code de la librairie standard. Un exemple avec les stream :

    Code :
    1
    2
    3
    4
     
    std::ifstream file(path.c_str());
    if (!file)
        return;
    En fait, l'écriture if (xxx) est préférée à if (xxx == NULL) ou autre, en raison d'un problème simple. Si xxx est du type paramétré T, quelle est la valeur qui signifie qu'il n'est pas setté ?

    Le langage tourne autour de la notion que false, 0, NULL et nullptr sont représenté par des valeurs qui sont égales à 0, assimilable à une valeur "faux" ou "incorrect", tandis que true, un entier quelconque != 0, un pointeur non nul, ... tout ça est différent de 0, et est donc assimilable à une valeur "vrai" ou "correct". Ca permet d'écrire du code plus simplement, et c'est tellement idiomatique qu'on ne peut pas dire que le code est peu lisible. En terme de maintenance, c'est tout aussi propre - la différence entre tester xxx == 0 ou xxx est quand même peu significative. Cependant, il faut apprendre à lire ce code comme étant "si xxx est correct", et non pas "si xxx est 0". 0 est une valeur spéciale, et si un test explicte contre 0 doit être fait, alors ce 0 spécifique est mieux représenté par un #define (donc le code devient if (xxx == MA_VALEUR_SPECIALE).
    [FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
    Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
    Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

  4. #4
    Inactif


    Homme Profil pro Guillaume Belz
    Biochimiste
    Inscrit en
    novembre 2008
    Messages
    5 317
    Détails du profil
    Informations personnelles :
    Nom : Homme Guillaume Belz
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Biochimiste
    Secteur : Santé

    Informations forums :
    Inscription : novembre 2008
    Messages : 5 317
    Points : 18 047
    Points
    18 047

    Par défaut

    De mémoire, la raison de l'identité bool == int est que les premières versions du C++ (ou du C ?) n'avait pas de type booléan et que l'on utilisait un entier à la place. Par compatibilité, c'est resté (a confirmer par un plus vieux de la veille que moi)

    Pour nullptr, un peu de lecture : Nouvelles fonctionnalités du C++11 - La constante nullptr

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •