C++中`auto check = [&](string_view s) { }`是什么声明?check如何作为函数使用?
C++相关问题解答
问题1:auto check = [&](string_view s) { }属于什么类型的声明?
这是C++11及更高版本支持的Lambda匿名函数(闭包)声明语句,各部分含义如下:
[&]是Lambda的捕获列表,表示按引用捕获当前作用域内所有可访问的变量- 括号内的
string_view s是Lambda的形参列表,规则和普通函数形参完全一致 - 花括号内是Lambda的函数执行逻辑
- 用
auto声明变量check来接收这个Lambda实例,因为Lambda的类型是编译器生成的唯一匿名类型,开发者无法手动写出类型名,必须通过auto自动推导。
问题2:代码中的check变量是如何作为函数实现调用和运行的?
Lambda本质是编译器自动生成的匿名类的实例对象,这个匿名类会默认重载operator()调用运算符,所以可以像普通函数一样被调用:
- 你编写的Lambda会被编译器翻译为唯一的匿名结构体,结构体内部会存储通过
[&]捕获的所有变量的引用,同时实现了对应签名的operator()成员函数(示例代码中Lambda被放在if判断里调用,说明实际场景下函数体内部会返回bool类型值) - 代码中
check(word)的调用逻辑,本质就是调用这个匿名结构体实例的operator()成员方法,将word作为实参传递给形参s,执行花括号内的逻辑后,将返回值作为if语句的判断条件使用。
内容的提问来源于stack exchange,提问作者SiIconic
相关产品推荐
相关产品推荐

