25

Sieht aus, als ob wir eine ganze neue Art von "Interviewfragen" für C++ bekommen (ich hoffe nicht, eigentlich).Was wird i ++ + i ++ in C++ 17 bewerten?

Es ist bekannt, undefiniertes Verhalten vor C++ 17, sondern wird es gut definierte von C++ 17 weiter sein?

Da scheint im Moment nicht ein Compiler, der diese C++ 17 Änderung implementiert, kann jemand erklären, was wird, nach Ausdruck Bewertungsregeln, der Wert von x im folgenden Code sein?

int i = 0; 
int x = i++ + i++; 

Alisdair Meredith erwähnt dieses Beispiel here in seinem CppCon 2016 zu sprechen, aber es ist nicht ganz klar zu mir, was der Endwert x sein wird (obwohl es was zu sagen scheint er ist, dass es zumindest sein werde 1).

Offensichtlich wird i selbst in diesem Fall 2 am Ende des Ausdrucks sein.

+0

Sie könnten z.B. [diese Sequenzierungs- und Bewertungsreihenfolge] (http://en.cppreference.com/w/cpp/language/eval_order). –

+4

@LeoHeinsaar Scheint, wir müssen unsere Reflexe in Zukunft anpassen ... –

+1

@ πάνταῥεῖ Ich verstehe, mach dir keine Sorgen. Es ist alles in Ordnung. :-) –

Antwort

18

P0145R3 (PDF) ändert nicht die Bewertungsreihenfolge aller Ausdrücke. Es betrifft nur eine kleine Anzahl von Operatoren. Und binäre Addition ist nicht auf dieser Liste.

Daher bleibt der obige Code undefiniert.

+1

Aber Alisdair sagt explizit in seiner Folie ist es * klar definiert. Ich bezweifle, dass es ein Versehen ist, oder? –

+2

Ich bin mir sicher, dass Alisdair das gesagt hat, aber ich bin mir genauso sicher, dass P0145R3 nicht mit ihm übereinstimmt. Eine ältere Version von P0145 bot tatsächlich eine Anordnung für binäre Operatoren im Allgemeinen an, aber die aktuelle Revision ist in ihrem Umfang begrenzter. Ich gehe also mit dem, was tatsächlich in der Zeitung steht, und nicht mit einer Folie. –

+1

@LeoHeinsaar Schauen Sie sich Abschnitt 5 der PDF an. – NathanOliver