Unterschied zwischen & und &&



  • Hat deine Frage nen Java Hintergrund?



  • & wertet immer beide Argumente aus, && nur das erste, wenn es false ist, das zweite nur, wenn das erste true ist.
    Nützlich für:

    if (ptr && ptr->val == 4)
    

    & würde ptr->val auch auswerten, wenn ptr NULL ist. Darüber hinaus ist die precedence anders, so dass man glaub ich Klammern verwenden müsste.



  • MichiH. schrieb:

    Was ist den der Unterschied zwischen & und && wenn man bedinungen in if-schleifen hat?

    http://www.if-schleife.de/



  • Und da ist natürlich noch die Tatsache, dass 1&2 false ist, 1&&2 dagegen true.



  • @Nathan

    trollst du oder kennst du wirklich nicht den Unterschied zwischen binär- und logisch UND ???



  • Gast3 schrieb:

    @Nathan

    trollst du oder kennst du wirklich nicht den Unterschied zwischen binär- und logisch UND ???

    Mir ist der Unterschied zwischen binären und logischem Und durchaus bewusst, ja.
    Allerdings fragt der Op den Unterschied im Kontext einer if-"Schleife". Und da gehe ich davon aus, dass der fragt, was der Unterschied ist, wenn man zwei boolsche Werte hat. Und der Unterschied bei boolschen Werten ist die short circuit evaluation und operator precedence.



  • Das ist hier die Frage. Das was nathan anfangs beschrieben ist genauso in Java garantiert.

    Wie sieht das der C++Standard?
    Durch implizites casten nach bool könnte da was gehen, aber das Gegebenbeispiel 1&2 und 1&&2 wurde ja schon genannt.

    Ich bin da echt neugierig...



  • Der Unterschied ist ähnlich dem zwischen den und denn.


  • Mod

    Skym0sh0 schrieb:

    Das ist hier die Frage. Das was nathan anfangs beschrieben ist genauso in Java garantiert.

    Wie sieht das der C++Standard?

    Du meinst Kurzschlussauswertung? Die ist garantiert. Auch fuer andere Operatoren, bei denen man sie erwarten wuerde. Aber nicht fuer Ueberladungen dieser Operatoren! Deshalb ueberlaedt man normalerweise auch keine logischen Operatoren.



  • Nein, dass Lazy Evaluationg reift ist mir durchaus klar. Und dass man durch Überladen von && und || da anderes Verhalten einbaut weiss ich auch.

    Aber ist es in C++ garantiert, dass eine Bedindungsverknüpfung per & oder | immer beide Seiten auswertet?


  • Mod

    Skym0sh0 schrieb:

    Nein, dass Lazy Evaluationg reift ist mir durchaus klar. Und dass man durch Überladen von && und || da anderes Verhalten einbaut weiss ich auch.

    Aber ist es in C++ garantiert, dass eine Bedindungsverknüpfung per & oder | immer beide Seiten auswertet?

    Ja, es ist auch garantiert, dass ein Operator nicht spontan mit Kurzschussauswertungen anfaengt. Diese ist ausschliesslich && , || und ? vorbehalten.


Anmelden zum Antworten