Es war schwer, von der proposal abzuleiten.
Werden C++ 17 strukturierte Bindungen ihre Bezeichner von links nach rechts initialisieren?Sind die Identifikatoren einer strukturierten Bindung der Reihe nach initialisiert?
Ist dies garantiert "zuerst", "zweite", dann "dritte" zu drucken?
#include <iostream>
struct A{ A(){std::cout << "first\n"; } };
struct B{ B(){std::cout << "second\n"; } };
struct C{ C(){std::cout << "third\n"; } };
struct D{
A first;
B second;
C third;
};
auto f(){
return D{};
}
int main(){
auto [a,b,c] = f();
}
Nach dem Lesen des Vorschlags (eine nette und willkommene) würde ich sagen, es ist nicht nur "schwer abzuleiten", sondern * unmöglich *. Während der Vorschlag einige Beispiele zeigt, sagt er nicht explizit etwas über die Reihenfolge der Bewertung oder Sequenzierung aus. –
Ich denke, C++ definiert bereits die Reihenfolge der Objekte Initialisierung in einer Klasse, die durch die Deklarationsreihenfolge ist, ist es? – Mine
@JoachimPileborg Richtig. Ich hoffe, es ist klar aus der Grammatik Ergänzungen: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0217r2.html –