Betrachten Sie dieses Beispiel:erfasste Variable Felle übergeben Variable in Lambda. wie man sich versteckt?
int main()
{
int a = 100;
std::cout<<[=,&a](int a,int b){return a+b;}(99,1);
return 0;
}
Der Ausgang ist 101
statt meiner Erwartung 100
.
Ich kann nicht als [&a,=]
so angeben, wie es Fehler gibt.
Wie vermeide ich den Namen versteckt und verweisen auf den Parameter. Ich weiß, den Namen ändern ist die Option, aber ich bin neugierig. Referenz auch wird hilfreich sein Standard
EDIT: Ich verwende gcc 4.7.1
EDIT:
hier ist die ideone Link, um die Demo zeigt. i verwendet C++ 4.7.2 complier es
ideone
kann nicht nur Sie ** ** eines der Argumente und der äußeren lokale Variable umbenennen? –
ja ich habe das in meiner Frage erwähnt, aber ich bin neugierig, warum das getan werden kann? –
'[&, =]' übergeben Sie alle Variablen als Referenz ** und ** alle gleichzeitig durch Kopieren?! Es ist bedeutungslos für mich. – deepmax