【问题标题】:What is lambda functions type? C++ [duplicate]什么是 lambda 函数类型? C++ [重复]
【发布时间】:2018-08-06 21:20:59
【问题描述】:

查看我的代码:

#include <iostream>
#include <typeinfo>

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

这是打印Z4mainEUliiE_。谁能解释为什么? x的实际类型是什么??

【问题讨论】:

  • 它正在打印类型...
  • 它是decltype(x)。为什么需要知道?
  • 请注意,如果您使用(int,int) 创建第二个 lambda,则其名称将为 Z4mainEUliiE0_,无论返回类型或正文代码如何(假设 Linux/gcc)。同样,第三个将得到1 而不是0,...

标签: c++ c++11 lambda c++14 decltype


【解决方案1】:

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

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

当您考虑它时,您(开发人员)实际上并不需要知道它的“实际名称”是什么。你可以参考一下就好了:

using my_lambda_type = decltype(x);

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

除了有关当前编译器实现的详细信息之外,您几乎无法从中收集(C++ 方面的信息)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-23
    • 2018-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-06
    相关资源
    最近更新 更多