2016-03-20 2 views
0

Я читал через исходный код из Proxygen Facebook, и я заметил, некоторые синтаксис я никогда не видел раньше:Что такое синтаксис: std :: thread t ([&]() {...}) ;?

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

Источник: https://github.com/facebook/proxygen/blob/master/proxygen/httpserver/samples/push/PushServer.cpp

Является ли это анонимный метод? И каково значение &, это нить?

Это выглядит запутанным, потому что, если это анонимный метод, то как server доступен, разве это не вне сферы действия?

+1

Это лямбда. '[&]' Означает, что переменные в текущей области захватываются ссылкой (в данном случае 'server'). –

+0

Его функция * лямбда *. http://en.cppreference.com/w/cpp/language/lambda – Galik

+0

Спасибо, ребята. Позаботьтесь, и я соглашусь. – BugHunterUK

ответ

1

Вы правы, этот код использует анонимную функцию. Основной синтаксис: [capture-list] (list-params) { function-body}. Так что [&] делает

захватывает все автоматические переменные УСО используемые в теле лямбда путем ссылки

Вы можете прочитать больше here