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 :

conversion bool integer


Sujet :

C++

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2012
    Messages : 11
    Points : 7
    Points
    7
    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 é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
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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'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

  3. #3
    Expert confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    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 895
    Points : 4 551
    Points
    4 551
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Points : 15 620
    Points
    15 620
    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

Discussions similaires

  1. Conversion hexadécimal Integer
    Par Sharcoux dans le forum Général Java
    Réponses: 6
    Dernier message: 18/02/2013, 20h02
  2. Problème de conversion avec INTEGER
    Par sempire dans le forum DB2
    Réponses: 1
    Dernier message: 30/12/2011, 16h47
  3. [Sunopsis] Problème de conversion float -> integer
    Par kergoussel dans le forum Alimentation
    Réponses: 3
    Dernier message: 05/12/2007, 14h47
  4. Conversion CHAR -> INTEGER
    Par randimby dans le forum DB2
    Réponses: 1
    Dernier message: 06/07/2006, 09h36
  5. Conversion en integer
    Par krfa1 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 15/11/2005, 11h33

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