Betrachten Sie den folgenden Code:
%Vor% In VC2010 führte die Verwendung von this
anstelle von a
zu Kompilierungsfehlern. Unter anderem:
Was ich nicht verstehe. Bedeutet es, dass es nicht weiß, ob es eine Referenz verwenden oder kopieren soll? Wenn Sie &this
verwenden, um die Referenzierung zu erzwingen, wird auch Folgendes angezeigt:
Das Provisorium ist nicht so nervig, aber aus Neugier, gibt es einen Weg, es loszuwerden? Was passiert, wenn this
einem Lambda gegeben wird?
Dies scheint ein Compilerfehler in VS2010 zu sein. Ich konnte es funktionieren lassen, indem ich das innere Lambda this
implizit erfassen ließ:
Wenn Sie versuchen, & zu verwenden, um das Referenzieren zu erzwingen, heißt es auch:
1 & gt; main.cpp (20): Fehler C3496: 'Dies' wird immer vom Wert erfasst: '& amp;' ignoriert
this
kann nur nach Wert erfasst werden. [=]
und [&]
erfassen beide nach Wert.
Was passiert, wenn das einem Lambda gegeben wird?
Ich weiß es nicht, aber es muss etwas Besonderes sein, weil Sie this
in einem Lambda nicht als Zeiger auf das Lambda-Objekt verwenden können. Alles andere, was erfasst wurde wird zu einem privaten Mitglied des Lambda, also vermutlich auch this
, aber es gibt eine spezielle Handhabung bei der Verwendung.
Dies ist ein bekannter Fehler beim Visual Studio 2010-Compiler (wie von Frédéric Hamidi kommentiert).
Sie müssen this
explizit erfassen, um es an die Capture-Spezifikation einer anderen Lambda zu übergeben. Dies gilt auch für lokale Variablen, die außerhalb des Lambda-umgebenden Lambda deklariert sind, selbst bei einer [&]
Capture-Spezifikation.