welche Bezeichner in der Konstruktorinitialisiererliste für Lambda verfügbar sind

8

mehr auf den Punkt, was ist falsch mit diesem Code:

%Vor%

Visual C ++ meldet einen Syntaxfehler :

%Vor%     
Cheers and hth. - Alf 01.07.2012, 17:01
quelle

1 Antwort

4

Um die Kommentare zusammenzufassen: Der Code des Fragestellers ist gültig. Offensichtlich werden einige Compiler, die älter sind als GCC 4.4 oder Visual C ++ 2011, aufgrund der unvollständigen Unterstützung dieser Compiler für C ++ 11-style ablehnen Lambda. Aber moderne Compiler (und sicherlich jeder Compiler, der behauptet, den neuen C ++ 11-Standard zu unterstützen) sollten damit zurechtkommen.

Um Ihre Frage wörtlich zu beantworten: In einer ctor-Initialisiererliste sind dieselben Bezeichner verfügbar (und beziehen sich auf die gleichen Dinge), auf die sie verweisen würden, wenn Sie sie in die geschweiften Klammern verschieben würden der Konstruktorfunktion selbst. Das bedeutet insbesondere, dass Sie

tun können %Vor%

Was der Standard zu diesem Thema zu sagen hat:

  

Namen in der Ausdruckliste oder braced-init-Liste eines mem-initializer   werden im Rahmen des Konstruktors ausgewertet, für den der    mem-initializer ist angegeben. ... [ Hinweis: Weil der mem-initializer ist   Sind [ sic ] im Gültigkeitsbereich des Konstruktors ausgewertet, kann der this -Zeiger sein   Wird in der Ausdruckliste eines mem-initializer verwendet, um auf die   Objekt wird initialisiert. - Endnote ] (N3337 §12.6. 2 # 12)

    
Quuxplusone 14.09.2012, 18:04
quelle

Tags und Links