Précédent   Forum du club des développeurs et IT Pro > C et C++ > C++ > Débuter
Débuter Forum d'entraide pour débuter en langage de programmation C++. Avant de poster : cours d'initiation au C++
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 12/12/2012, 15h18   #1
ezrider
Invité de passage
 
Inscription : 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
ezrider est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/12/2012, 15h31   #2
r0d
Expert Confirmé Sénior
 
Inscription : août 2004
Messages : 3 665
Détails du profil
Informations personnelles :
Localisation : Belgique

Informations forums :
Inscription : août 2004
Messages : 3 665
Points : 4 421
Points : 4 421
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
r0d est déconnecté   Envoyer un message privé Réponse avec citation 02
Vieux 12/12/2012, 17h32   #3
Emmanuel Deloget
Expert Confirmé Sénior
 
Homme Emmanuel Deloget
Développeur informatique
Inscription : septembre 2007
Messages : 1 826
Détails du profil
Informations personnelles :
Nom : Homme Emmanuel Deloget
Âge : 37
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 826
Points : 4 381
Points : 4 381
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.
Emmanuel Deloget est déconnecté   Envoyer un message privé Réponse avec citation 30
Vieux 12/12/2012, 18h00   #4
gbdivers
Responsable C++

 
Homme Guillaume Belz
Biochimiste
Inscription : novembre 2008
Messages : 5 311
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Belz
Âge : 37
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Biochimiste
Secteur : Santé

Informations forums :
Inscription : novembre 2008
Messages : 5 311
Points : 19 509
Points : 19 509
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
__________________
Vous souhaitez rejoindre l'équipe de bénévoles qui fait vivre Developpez (traduction, rédaction, modération) ? Contactez moi par MP.

Ma page personnelle avec la liste de mes articles - Mon blog sur le C++, Qt et les GPU.

Je suis régulièrement sur le chat pour les questions C++/Qt.

Apprendre Qt 5 : vidéos d'installation (YouTube), extraites du livre Créer des applications avec Qt 5.
gbdivers est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 03h18.


 
 
 
 
Partenaires

Hébergement Web