Destruktoraufruf in einem durch Kommas getrennten Ausdruck

7

Betrachten Sie das folgende Beispielprogramm:

%Vor%

Die Ausgabe, die ich mit GCC 4.9.2 erhalte, ist:

%Vor%

cpp.sh-Link: Ссылка

Allerdings nach cppreference über den Komma-Operator:

  

In einer Komma-Expression E1, E2 wird der Ausdruck E1 ausgewertet, sein Ergebnis wird verworfen und seine Nebenwirkungen werden beendet, bevor die Auswertung des Ausdrucks E2 beginnt.

Ich würde erwarten, dass ~t() vor cout << "doing stuff"

aufgerufen wird

Ist das ein Standardverhalten? Wenn ja, wo ist es im Standard definiert?

    
Nyashes 01.06.2017, 13:52
quelle

2 Antworten

12

"Sein Ergebnis wird verworfen" bedeutet, dass der Wert des Unterausdrucks (hier vom Typ t ) ignoriert wird.

Seine Lebensdauer ist jedoch nicht betroffen: wie bei allen Provisorien wird sie am Ende des Volltexts (d. h. das Semikolon hier) zerstört.

    
Quentin 01.06.2017, 13:55
quelle
6

Der cppreference Wortlaut hier ist bedauerlich.

Wie bei jedem temporären, wird dieses bis zum Ende des full-expression , in dem es erscheint, bestehen bleiben.

Unter "Nebenwirkungen" wird über die Konstruktion des Temporären gesprochen.

    
quelle