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 :

Le 'ou' bien traite


Sujet :

C++

  1. #1
    Membre averti
    Inscrit en
    Juillet 2005
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 54
    Par défaut Le 'ou' bien traite
    Salut a tous,
    je voudrais si possible que vous me confirmiez que si j'ecris:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (condition1 || condition2) { faireqqch(); }
    eh bien faireqqch() est appele si et seulement si: condition 1 est verifie ou condition 2 est verifiee ET condition1 est verifiee, mais pas si condition2 est verifiee SEULE.

    Il me semble qu'en utilisant plutot l'operateur simple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (condition1 | condition2) {}
    cela permet d'etre sur que soit l'une soit l'autre des conditions doit etre verifiee, est-ce vrai ?

    Merci !

  2. #2
    Membre Expert
    Avatar de hiko-seijuro
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 011
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 011
    Par défaut
    la premiere version est la bonne

    | corresponde à un opérateur binaire et non booléen

  3. #3
    Membre confirmé Avatar de BigNic
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    195
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 195
    Par défaut
    non !
    ici faireqqch() est exécuter si condition1 ou condition2 sont vérifié
    si tu veux faire ce que tu dis:
    eh bien faireqqch() est appele si et seulement si: condition 1 est verifie ou condition 2 est verifiee ET condition1 est verifiee, mais pas si condition2 est verifiee SEULE.
    le code qu'il te faut est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    if (conditon1)
        faireqqch()

  4. #4
    Membre averti
    Inscrit en
    Juillet 2005
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 54
    Par défaut
    Mais alors a priori l'ordre des conditions ne compte pas ? j'avais cru lire qq part que le compilateur n'allait pas chercher plus loin si la premiere condition etait fausse...

  5. #5
    Membre chevronné Avatar de Mayti4
    Inscrit en
    Février 2004
    Messages
    442
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 442
    Par défaut
    Non tu as faut, faireqqch() sera appelé si une des condition est vraie.

    | n'est pas un opérateur booléen.

  6. #6
    Membre chevronné Avatar de Mayti4
    Inscrit en
    Février 2004
    Messages
    442
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 442
    Par défaut
    Citation Envoyé par Benjy
    Mais alors a priori l'ordre des conditions ne compte pas ? j'avais cru lire qq part que le compilateur n'allait pas chercher plus loin si la premiere condition etait fausse...
    Avec l'opérateur && oui, mais seulement en 'dur', le compilateur ne connait pas à l'avance la valeur des variables.

  7. #7
    Membre averti
    Inscrit en
    Juillet 2005
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 54
    Par défaut
    Tu pourrais me donner un exemple plz ?

  8. #8
    Membre confirmé Avatar de BigNic
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    195
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 195
    Par défaut
    de toute façon cela n'a pas de sens de faire ça avec un OU. Fait la table de vérité de ce que tu voulais faire et tu verra que cela revient à tester uniquement ta première condition.

  9. #9
    Membre confirmé Avatar de deeal
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    218
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 218
    Par défaut
    Citation Envoyé par Mayti4
    Citation Envoyé par Benjy
    Mais alors a priori l'ordre des conditions ne compte pas ? j'avais cru lire qq part que le compilateur n'allait pas chercher plus loin si la premiere condition etait fausse...
    Avec l'opérateur && oui, mais seulement en 'dur', le compilateur ne connait pas à l'avance la valeur des variables.
    qu'est-ce que tu veux dire par dur?
    au moment de l'execution?
    c'est vrai que ca compte pour le && et ca peut faire un peu plus rapide caar le compilateur ne va pas chercher a verifier les conditions suivante si la premiere n'est pas verifiee

  10. #10
    Membre averti
    Inscrit en
    Juillet 2005
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 54
    Par défaut
    Voila c tout ce que je voulais savoir merci

  11. #11
    Membre chevronné Avatar de Mayti4
    Inscrit en
    Février 2004
    Messages
    442
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 442
    Par défaut
    Par dur, je veux dire que les valeurs sont connus à la compilation.

  12. #12
    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
    Le court circuit d'évaluation est autre chose. Soit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    bool b1 = f() || g();
    bool b2 = h() && i();
    Dans tous les cas, l'appel de f et de h a lieu.

    Si f() retourne vrai, on n'a pas besoin de calculer l'expression g() pour savoir que b1 sera vrai, et on a une garantie que cette expression ne sera pas évaluée. Si f est faux, on calcule g() pour déterminer la veur de b1.

    Si h() retourne faux, même chose, on sait déjà que b2 vaudra false, et on a alors la garantie que i() ne sera pas évalué.

    Le cas le plus courant que j'ai vu, c'est pour du code style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Obj *p;
    if (p && p->valid()) {}
    Je précise enfin que ce court-circuit n'est valable que pour des booléens. Si tu surcharges ces opérateur pour tes propres classes, les deux expressions seront évaluées, et rien ne garanti dans quel ordre (comme pour n'importe quelle fonction, quoi).
    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.

Discussions similaires

  1. Comment bien déboguer son code ?
    Par D[r]eadLock dans le forum Débuter
    Réponses: 47
    Dernier message: 02/04/2024, 16h06
  2. Programmer encore en VB 6 c'est pas bien ? Pourquoi ?
    Par Nektanebos dans le forum Débats sur le développement - Le Best Of
    Réponses: 85
    Dernier message: 10/03/2009, 14h43
  3. Réponses: 4
    Dernier message: 23/10/2003, 08h03
  4. [mise en page] pour bien indenter son code
    Par bihorece dans le forum C++Builder
    Réponses: 4
    Dernier message: 06/08/2003, 16h14
  5. Comment bien gerer la mémoire avec les TStringList?
    Par david_chardonnet dans le forum Langage
    Réponses: 5
    Dernier message: 18/06/2003, 09h57

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