2013-03-09 2 views
2

Может кто-нибудь помочь мне понять следующий кодЧто такое лямбда-функции?

#include <iostream> 
using namespace std; 

int main() 
{ 
    auto hello = []() -> void { 
     cout << "Hello World"; 
    }; 

    // Call the lambda function 
    hello(); 
} 

Что такое использование auto hello = []() -> void здесь? я не понимаю смысла завершающей точки с запятой после фигурной скобки (строка 7)

ответ

7

Читая, как если бы она была одна строкой:

auto hello = []() -> void { cout << "Hello World"; }; 

hello является переменным, которая имеет лямбду, что

  • не улавливает внешние переменные ([])
  • не принимает параметры (())
  • возвращает void (-> void, это называется «возвращаемым типом возврата», указывая тип возврата лямбды так же, как и для обычной функции. Это фактически не нужно здесь.), И
  • состоит из одного заявления cout внутри его тела.

Фактически это не выполняется до следующей строки, где она явно называется.

+0

Стоит отметить, что все, что делает эта строка, это присвоение лямбда переменной 'hello'. Он не запускается до вызова 'hello()' на следующей строке. –

+0

Кроме того, нет необходимости указывать тип возврата, если он недействителен, поэтому возвращаемый здесь тип возврата лишний. – juanchopanza

+0

Спасибо, я включил ваши предложения. – us2012

Смежные вопросы