Nach meinem Wissen sind Kennungen, die von strukturierten Bindungen in C ++ 17 eingeführt werden, tatsächlich Verweise auf eine "versteckte" Variable. So dass
%Vor%ist Art äquivalent zu
%Vor% Wenn ich jedoch std::is_reference<decltype(a)>::value
ausdrucke, erhalte ich 0
im ersten Fall 1
in der zweiten. Warum ist das so?
Wenn ich
std::is_reference<decltype(a)>::value
ausdrucke, bekomme ich 0 im ersten Fall 1 im zweiten.
Warum können wir sogar beweisen, dass sich a
und b
auf die Elemente im Tupel beziehen und man diese Werte mit diesen ändern kann?
Ich bin kein Sprachanwalt, aber wahrscheinlich liegt es an diesem Bullet des Standards (Arbeitsentwurf):
Wenn
e
ein ungeprüfter ID-Ausdruck ist, der eine strukturierte Bindung [...] benennt, istdecltype(e)
der referenzierte Typ, wie er in der Spezifikation der strukturierten Bindungserklärung angegeben ist
Randnotiz. Sie sollten dieses Formular verwenden, damit a
und b
auf die Elemente im Tupel verweisen:
Es folgt ein minimales, funktionierendes Beispiel:
%Vor%Sehen Sie es auf Coliru . Auf der anderen Seite erhalten Sie eine Kopie der Werte mit folgendem Ausdruck:
%Vor%Hier ist ein Artikel, der es besser erklärt und ein bisschen verständlicher ist als der Standard für Menschen .
Nach meinem Wissen sind Bezeichner, die durch strukturierte Bindungen in C ++ 17 eingeführt werden, tatsächlich Verweise auf eine "versteckte" Variable.
Wenn Sie mit "Referenz" die Sprachkonstrukt-Referenz meinen, ist das nicht ganz korrekt. Die Spezifizierer in der Deklaration gehören zu der "versteckten Variablen", von der Sie sprechen. Das Referenzqualifikationsmerkmal ist optional. Der Code, den du präsentierte, würde eher so aussehen:
%Vor%Tags und Links c++ reference c++17 decltype structured-bindings