什么是lambda函数类型?C++

Edu*_*yan 4 c++ lambda decltype c++11 c++14

看我的代码:

#include <iostream>
#include <typeinfo>

int main() {
    auto x = [](int a, int b) -> bool{return a<b;};
    std::cout<<typeid(decltype(x)).name()<<std::endl;
}
Run Code Online (Sandbox Code Playgroud)

这就是印刷Z4mainEUliiE_.谁能解释一下whay?什么是x的实际类型?

Sto*_*ica 9

lambda的实际类型被指定为对应于lambda表达式的"唯一闭包类型".

它的名字没有指定.它的布局甚至没有完全指定.它几乎完全是一个实现定义类型,通常不知道也不关心的名称.

当你考虑它时,你(开发人员)并不需要知道它的"实际名称"是什么.你可以参考它:

using my_lambda_type = decltype(x);
Run Code Online (Sandbox Code Playgroud)

您的问题的另一个方面是,除了闭包类型是实现定义之外,行为std::type_info::name本身是实现定义的.您正在通过完全实现定义的机制为实现定义的类型打印实现定义的名称.

除了有关当前编译器实现的详细信息之外,您可以从中收集(C++明智).