什么类型的变量包含lambda

时间:2015-02-13 11:00:06

标签: c++ c++11 lambda

您可以在此上下文中解释哪种类型的L。 换句话说,我可以使用哪种类型auto关键字?

int main(){
 int x=0;
 auto L = [x] (int y)->bool{
   return x>y;
 };
  return 0; 
}

2 个答案:

答案 0 :(得分:7)

在此上下文中,您可以使用C ++ 11中的任何内容而不是auto,这意味着完全相同的类型。那是因为每个lambda表达式的类型是唯一的,未命名的类型。引用C ++ 11 5.1.2 / 3:

  

lambda-expression 的类型(也是闭包对象的类型)是一个唯一的,未命名的非联合   类类型 - 称为闭包类型 - 其属性如下所述。 ...

答案 1 :(得分:1)

您可以使用std::function代替`auto,但您可能不想。

This article更详细地解释:

  

auto背后的基本原理是编译器知道类型......   但你要么无法形容,要么不想。有一个   主要用例,你不能命名类型 - 使用lambdas。

然后文章说明了如何使用std :: function,但运行时间会受到惩罚。