Welche Arten von Bezeichnern werden in C ++ 17 durch strukturierte Bindungen eingeführt?

8

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?

    
Daniel Langr 21.06.2017, 09:13
quelle

2 Antworten

9
  

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, ist decltype(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:

%Vor%

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 .

    
skypjack 21.06.2017, 09:34
quelle
0
  

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%     
user8193326 21.06.2017 09:53
quelle