Wie geht C++ mit && um? (Kurzschlussauswertung) [duplicate]

Lesezeit: 3 Minuten

Wie geht C mit um Kurzschlussauswertung duplicate
Alexander Ulme

Wenn c++ auf ein (bool1 && bool2) stößt, versucht es jemals, bool2 zu überprüfen, wenn bool1 als falsch befunden wurde, oder ignoriert es es so wie PHP es tut?

Tut mir leid, wenn es eine zu grundlegende Frage ist, aber ich konnte weder bei Schildt noch im Internet eine Erwähnung dazu finden.

Wie geht C mit um Kurzschlussauswertung duplicate
Jason

Ja das && Operator in C++ verwendet Kurzschlussauswertung also wenn bool1 wertet zu false es stört nicht zu bewerten bool2.

„Kurzschlussauswertung“ ist der schicke Begriff, den man googeln und in Indizes suchen möchte.

Dasselbe passiert mit der || Betreiber, ggf bool1 wertet zu true dann wird der gesamte Ausdruck ohne Auswertung als wahr ausgewertet bool2.

Falls Sie trotzdem alle Ausdrücke auswerten möchten, können Sie die verwenden & und | Betreiber.

  • Wie sieht es mit der Kurzschlussauswertung mit oder || aus?

    Benutzer656925

    10. Februar 2012 um 15:54 Uhr

  • Die || Betreiber nutzt auch Kurzschlussauswertung. Der Unterschied besteht darin, dass ein Ausdruck gegeben ist bool1 || bool2wann bool1 wertet zu false dann bool2 wird auch ausgewertet.

    – Herr Todlos

    31. Dezember 2014 um 9:33 Uhr

  • > “falls Sie trotzdem alle Ausdrücke auswerten möchten, können Sie die & und | verwenden Betreiber.” Das Ersetzen des logischen && und || durch bitweise Operatoren & und | ist nicht sicher, es sei denn, Sie verwenden es strikt bool Ausdrücke. Da die logischen Operatoren auf andere Typen wirken können, ist es nicht garantiert, zuverlässige Ergebnisse zu erhalten. Zum Beispiel: 4 && 2 wertet zu truewährend 4 & 2 wertet zu 0. 4 || 2 wertet zu truewährend 4 | 2 wertet zu 6. Wenn Sie die Auswertung beider Ausdrücke erzwingen und einen logischen Vergleich durchführen möchten, werten Sie sie explizit aus und vergleichen Sie sie dann.

    – Affe47

    16. Februar um 21:17 Uhr


C++ verwendet Kurzschlusslogik, also if bool1 falsch ist, muss es nicht überprüft werden bool2.

Dies ist nützlich, wenn bool2 tatsächlich eine Funktion ist, die bool zurückgibt, oder um einen Zeiger zu verwenden:

if ( pointer && pointer->someMethod() )

Ohne Kurzschlusslogik würde es beim Dereferenzieren eines NULL-Zeigers abstürzen, aber mit Kurzschlusslogik funktioniert es gut.

  • Können Sie sicher sein pointer wird vorher ausgewertet pointer->someMethod()?

    – Admiral Adama

    31. Mai 2021 um 19:15 Uhr

1646982608 580 Wie geht C mit um Kurzschlussauswertung duplicate
Matte

Das ist richtig (Kurzschlussverhalten). Aber Vorsicht: Das Kurzschließen stoppt, wenn der aufgerufene Operator nicht der eingebaute Operator ist, sondern ein benutzerdefinierter operator&& (Das gleiche mit operator||).

Verweis in dieser SO

  • Das Kurzschließen ist jedoch keineswegs auf native Typen beschränkt. Überladen einer Konvertierung in bool (oder safe bool) statt operator && macht diese Arbeit gut.

    – Konrad Rudolf

    6. März 2011 um 19:42 Uhr

  • Interessant. Das wusste ich nicht. Kennen Sie den Abschnitt/Text aus der Norm, der dies definiert?

    – Macke

    6. März 2011 um 20:13 Uhr


  • Das ist richtig, Hinweis in dieser SO. Ich werde versuchen, meine Antwort umzuformulieren.

    – Matte

    6. März 2011 um 20:24 Uhr

Die && Operatorkurzschlüsse in C++ – if bool1 war in deinem Beispiel falsch, bool2 würde nicht überprüft/ausgeführt werden.

Dies wird als Kurzschlussauswertung bezeichnet (Wikipedia)

Der Operator && ist ein Kurzschlussoperator in C++ und wertet bool2 nicht aus, wenn bool1 falsch ist.

Wie geht C mit um Kurzschlussauswertung duplicate
TCSGrad

Kurzschlussauswertung bezeichnet die Semantik einiger boolescher Operatoren in manchen Programmiersprachen, bei denen das zweite Argument nur dann ausgeführt bzw. ausgewertet wird, wenn das erste Argument nicht ausreicht, um den Wert des Ausdrucks zu bestimmen: etwa wenn das erste Argument des AND Funktion als falsch ausgewertet wird, muss der Gesamtwert falsch sein; und wenn das erste Argument der ODER-Funktion wahr ist, muss der Gesamtwert wahr sein.

In C++ sowohl && als auch || Betreiber nutzen Kurzschlussauswertung.

1646982609 63 Wie geht C mit um Kurzschlussauswertung duplicate
DerTFo

Worauf Sie sich beziehen, ist Kurzschlussauswertung. Ich dachte, dass es Compiler-spezifisch sein könnte, aber der Artikel, auf den ich verlinkt habe, zeigt es als sprachspezifisch, und C++ hält sich daran. Wenn es tatsächlich Compiler-spezifisch ist, kann ich mir keinen Compiler vorstellen, der ihm nicht folgen würde. Der tägliche Compiler, den ich im Moment verwende, VS 2008, tut dies. Grundsätzlich folgt es der Operatorpriorität, und sobald das Bedingungsergebnis garantiert ist,

990170cookie-checkWie geht C++ mit && um? (Kurzschlussauswertung) [duplicate]

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy