p
u
b
l
i
c
i
t
é
publicité
  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 195
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : août 2004
    Messages : 4 195
    Points : 5 982
    Points
    5 982

    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

  3. #3
    Expert Confirmé Sénior

    Homme Profil pro
    Développeur informatique
    Inscrit en
    septembre 2007
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    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 469
    Points
    4 469

    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 308
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : novembre 2008
    Messages : 5 308
    Points : 15 080
    Points
    15 080

    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 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