was passiert mit der letzten Rückgabe * dieses C ++?

7
%Vor%

Ich verstehe den kaskadierten Memberfunktionsaufruf, aber ich verstehe nicht, wie t.setHour (18) .setMinute (30) .setSecond (22); bleibt hängen, muss es nicht etwas zugewiesen werden, da es immer noch zurückkommt * das nachdem es kaskadiert ist? Warum ist es in Ordnung, es so zu lassen?

    
user3348712 06.03.2014, 19:11
quelle

4 Antworten

10

Der Wert des Ausdrucks, der als Anweisung verwendet wird, wird verworfen. Es ist das gleiche, was passiert, wenn Sie

schreiben %Vor%

Sie wussten, dass scanf einen Rückgabewert hat, richtig? Und so auch ++i in

%Vor%

Und sogar

%Vor%

verwirft das Ergebnis des Ausdrucks.

Es gibt viele Ausdrücke und Funktionen mit Rückgabewerten, die nur am Rande nützlich sind. Wenn Sie den Code so schreiben möchten, dass der Rückgabewert absichtlich und nicht zufällig ignoriert wird, übergeben Sie ihn an void:

%Vor%

Dies sollte Compiler-Warnungen über ignorierte Rückgabewerte stummschalten.

Diese Variationen sind auch gültig, aber ein bisschen dümmer:

%Vor%     
Ben Voigt 06.03.2014, 19:15
quelle
7

Dies wird als "fließende Syntax", "fließende Schnittstelle" oder "Methodenverkettung" bezeichnet. Sie sind völlig frei zu ignorieren / wegwerfen / nicht mit einem Rückgabewert belästigen, wenn es zur Verfügung gestellt wird (aber Sie sind nicht daran interessiert). Es macht die Verknüpfung von Funktionsaufrufen einfacher (und auf welchem ​​Boot Sie sitzen, ob das gut oder schlecht ist, liegt ganz bei Ihnen).

Daher gibt jede Methode *this zurück, damit Sie diese Aufrufe zusammen ketten können, aber die letzte wird nur ausgegeben, ignoriert, nicht verwendet.

Das ist völlig in Ordnung.

    
Moo-Juice 06.03.2014 19:13
quelle
2

Da jemand nach einem Standardzitat in einem Kommentar gefragt hat ...

Dies wird als "Ausdrucksanweisung" bezeichnet. Der C ++ 11-Standard sagt dazu Folgendes:

  

6.2 Ausdrucksanweisung [stmt.expr]

     

Ausdruckanweisungen haben die Form

%Vor%      

Der Ausdruck ist ein Ausdruck mit verworfenem Wert (Abschnitt 5). Auf der ganzen Seite   Auswirkungen von einer Ausdrucksaussage werden vor der nächsten abgeschlossen   Anweisung wird ausgeführt. Eine Ausdrucksanweisung mit dem Ausdruck   Missing wird als Null-Anweisung bezeichnet. [Hinweis: Die meisten Aussagen sind   Ausdruck Anweisungen - in der Regel Zuweisungen oder Funktionsaufrufe. Eine Null   Anweisung ist nützlich, um ein Label direkt vor der} einer Verbindung zu tragen   Anweisung und um einer Iterationsanweisung wie z   eine while-Anweisung (6.5.1). - Endnote]

Bezüglich des "verworfenen Wertausdrucks" sagt Abschnitt 5:

  

In einigen Kontexten erscheint ein Ausdruck nur für seine Seiteneffekte. Ein solcher Ausdruck wird als Ausdruck mit verworfenem Wert bezeichnet. Der Ausdruck wird ausgewertet und sein Wert wird verworfen. ...

    
Michael Burr 06.03.2014 20:43
quelle
1

Es ist nur eine Ausdruckserklärung, die über die Nebeneffekte innerhalb der Funktionsaufrufe sinnvolle Dinge tut.

Sie müssen nichts mit dem Wert eines Ausdrucks tun.

%Vor%

ist legal C ++.

Wenn Sie es überprüfen möchten, überprüfen Sie eine C ++ Grammatik, z. Ссылка

%Vor%     
mvw 06.03.2014 19:26
quelle

Tags und Links