Vergleiche: ungleich vs nicht gleich



  • Hallo zusammen,

    nach Verlassen eines Formulars werte ich ModalResult aus. Im Fall mrCancel trifft die Bedingung Fall A zu, Fall B nicht, warum? Ich hatte beides für gleichwertig gehalten.

    Fall A:

    if(Form1->ModalResult != mrOk)
    

    Fall B:

    if(!Form1->ModalResult == mrOk)
    

    Gruß
    Leo



  • Der operator! hat eine höhere Priorität hat als der operator==, daher werden die Ausdrücke unterschiedlich ausgewertet:

    Form1->ModalResult != mrOk
    
    entspricht
    
    ((Form1->ModalResult) != (mrOk))
    

    und

    !Form1->ModalResult == mrOk
    
    entspricht
    ((!Form1->ModalResult) == (mrOk)
    

    Im zweiten Beispiel wird also Form->ModalResult erst negiert und dann mit mrOk verglichen, was nicht der Negation des Vergleichs von Form->ModalResult und mrOk entspricht.



  • if(!Form1->ModalResult == mrOk)
    

    Kleiner Denkfehler: Du negierst nicht den Vergleich, sondern Form1->ModalResult

    Du musst erst den Vergleich durchführen und dann erst negieren:

    if(!(Form1->ModalResult == mrOk))
    

    [Edit] Seufzer, zu langsam...



  • Okay, besten Dank!
    Leo


Anmelden zum Antworten