该符号在代码中的含义是什么? []()

时间:2019-03-18 23:57:12

标签: c++ arduino esp8266 arduino-esp8266

从ESP8266WebServer的文档开始https://github.com/esp8266/Arduino/tree/master/libraries/ESP8266WebServer,它显示了server.on这样的语法

server.on("/", handlerFunction);

我不知道这行在做什么。

server.on ( "/admin.html", []() { Serial.println("admin.html"); server.send ( 200, "text/html", PAGE_AdminMainPage );   }  );

我特别不了解[]()是什么。剩下的我明白了。

1 个答案:

答案 0 :(得分:1)

这就是所谓的“ lambda表达式”。 C ++和许多其他语言都支持(C不支持)。

Lambda表达式用于允许语言操纵函数。在这种情况下,lambda表达式使您可以使用“匿名函数”,以便可以将处理程序传递给server.on(),而不必事先将其声明为具有名称的函数。

通过[]部分,您可以指定“捕获”-可以用于lambda函数的变量。 ()部分是声明函数时将具有的函数参数的常规列表。 {}部分当然是函数的代码。

在这种情况下,没有捕获,也没有参数,所以[]() { code... }

您可以在https://en.cppreference.com/w/cpp/language/lambda#Syntax

上阅读有关C ++ lambda表达式的更多信息。