Was ist die Ausgabe von "cout (a, b)" und warum?

7

Es ist möglich, boolesche Ausdrücke mit einem Komma-Trennzeichen zu kombinieren. Ich habe es in einem Code gesehen und bin mir nicht sicher, woran das liegt. Ich habe einen Beispielcode geschrieben.

%Vor%

Die Ausgabe davon ist:

%Vor%

Ich bin mir nicht sicher, ob das nur für mein System zutrifft und ob dieser Aufruf tatsächlich dasselbe ist wie eine boolesche Kombination von Anweisungen.

Was ist die Ausgabe, ist es auf allen Systemen gleich? Warum ist diese Aussage möglich und gibt es eine Dokumentation?

    
Johannes 04.02.2015, 16:12
quelle

5 Antworten

7
  

Was ist die Ausgabe, ist es auf allen Systemen gleich?

Die Ausgabe ist wie beschrieben: der zweite der beiden Werte. Es ist gut definiert.

  

Warum ist diese Aussage möglich?

Weil der Komma-Operator es Ihnen ermöglicht, mehr als eine Sache in einem einzelnen Ausdruck auszuwerten.

  

Gibt es eine Dokumentation?

Es ist im C ++ - Standard [expr.comma] dokumentiert. In C ++ 11 ist das 5.18.

Um zusammenzufassen, der Komma-Operator:

  • wertet den Ausdruck vor dem Komma aus;
  • verwirft diesen Wert;
  • wertet den Ausdruck nach dem Komma;
  • aus
  • gibt diesen Wert als Gesamtausdruckswert zurück.

Das sehen Sie in Ihrer Ausgabe: In jedem Fall ist die Ausgabe der Wert nach dem Komma.

Es ist völlig sinnlos in diesem Fall; Ist aber nützlich, wenn der erste Ausdruck Nebenwirkungen hat, die Sie vor dem zweiten sequenzieren möchten, in einer Situation, die nur einen einzigen Ausdruck erlaubt. Zum Beispiel:

%Vor%

Der Operator erlaubt dem letzten Ausdruck, zwei Dinge zu tun, obwohl Sie nur einen Ausdruck dort einfügen können.

    
Mike Seymour 04.02.2015, 16:20
quelle
10

Der Komma-Operator gibt die rechte Seite zurück.

Wikipedia :

  

In den C- und C ++ - Programmiersprachen ist der Komma-Operator (dargestellt durch das Token) ein binärer Operator, der seinen ersten Operanden auswertet und das Ergebnis verwirft, den zweiten Operanden dann auswertet und diesen Wert (und Typ) zurückgibt.

    
djechlin 04.02.2015 16:13
quelle
7

Ein Ausdruck, der so aussieht

%Vor%

ist ein Komma-Ausdruck , sein Wert ist sein Ergebnis ist der rechte Operand, d

%Vor%

würde den Wert von z erzeugen.

Beachten Sie, dass alle Ausdrücke in der Kette ausgewertet werden, einschließlich dieser mit Nebenwirkungen . Darüber hinaus fungiert Komma als ein Sequenzpunkt , was bedeutet, dass die Nebenwirkungen vor der Auswertung des nächsten Operanden angewendet werden.

    
dasblinkenlight 04.02.2015 16:13
quelle
4

Dies liegt daran, dass es in Ihren Beispielen den letzten Wert Ihrer Ausdrucksfolge zurückgibt:

%Vor%     
axelduch 04.02.2015 16:13
quelle
2

In C ++ gibt ein Komma-Operator dem Compiler die Reihenfolge der Auswertung. Normalerweise ist der Compiler frei, jeden Ausdruck so zu bewerten, wie er möchte. Aber der Komma-Operator wertet seinen linken Operanden vor dem rechten Operanden aus und gibt den Wert des rechten Operanden zurück.

In einer Kette von Operanden, die durch den Kommaoperator verbunden sind, ist der zurückgegebene Wert der Operand ganz rechts.

    
Cpp Programmer 04.02.2015 16:41
quelle

Tags und Links