2016-03-20 7 views
0

Ich wurde von Facebook Proxygen durch den Quellcode zu lesen, und ich einige Syntax bemerkte ich nie zuvor gesehen hatte:Welche Syntax ist das: std :: thread t ([&]() {...});

std::thread t([&]() { 
    server.start(); 
}); 

Quelle: https://github.com/facebook/proxygen/blob/master/proxygen/httpserver/samples/push/PushServer.cpp

Ist es eine anonyme Methode? Und was ist der Wert von &, ist es der Thread?

Es sieht verwirrend aus, denn wenn es eine anonyme Methode ist, wie ist server zugänglich, ist es nicht außerhalb des Geltungsbereichs?

+1

Es ist ein Lambda. Das '[&]' bedeutet, dass Variablen im aktuellen Bereich durch Verweis (in diesem Fall 'Server') erfasst werden. –

+0

Es ist eine * Lambda-Funktion *. http://en.cppreference.com/w/cpp/language/lambda – Galik

+0

Danke Jungs. Kümmere dich um Antworten und ich werde akzeptieren. – BugHunterUK

Antwort

1

Sie haben Recht, dieser Code verwendet anonyme Funktion. Die grundlegende Syntax lautet: [capture-list] (list-params) { function-body}. Also, was [&] tut, ist

alle automatischen Variablen einfängt-odr verwendet im Körper des Lambda durch Bezugnahme

Sie lesen können mehr here