2016-10-23 1 views
1

Ich bin sehr neu zu diesem Feature, ich habe gerade über Lambda Ausdruck in C++ gelesen und versucht, es in einem einfachen Programm zu implementieren.Warum C++ Lambda Expression funktioniert nicht

int main() 
{ 
    std::string name; 
    int a = 5; 
    std::cout << "What is your name? "; 
    getline (std::cin, name); 
    for([&](){a = 7;};a > 0; a--) 
    { 
    std::cout << "Hello, " << name << "!\n"; 
    } 
} 

aber seine nicht funktioniert, wie ich dachte es wird .. Meine Vermutung: [&](){a = 7;} dieser Wert der Variablen ein bis 7 von 5, aber nicht seine ändern .. Gibt es etwas falsch in Code ?? Oder ist nur meine Annahme falsch?

+0

Mögliches Duplikat von [Lambda gibt '1' alle Zeit zurück] (http://stackoverflow.com/questions/28273891/lambda-returns-1-all-time) –

+3

Sie haben das Lambda erstellt und es weggeworfen. Sie müssen den Operator() aufrufen, um ihn auszuführen. –

+0

@RaymondChen hat es .. das Problem gelöst .. Danke .. :) –

Antwort

1

Ihre Annahme ist richtig, vorausgesetzt Sie rufen es auf.

[&]: implizit erfassen durch Referenz. Alle lokalen Namen können verwendet werden. Alle lokalen Variablen sind , die durch Referenz aufgerufen werden.

Sie können auf die lokale Variable zugreifen, aber das Lambda selbst wird nicht aufgerufen. Dies ist, was im Code passiert:

Lambda Expression without capture -> functionPtr -> bool (true for non-null functionPtr)

wo -> implizite Konvertierung ist

(lambdaExpression)() oder lambdaExpression() Stattdessen tun sie aufzurufen.