【问题标题】:What type of variable that contain lambda [duplicate]什么类型的变量包含 lambda [重复]
【发布时间】:2015-04-14 09:43:36
【问题描述】:

你能解释一下在这种情况下L 的类型吗? 换句话说,我可以使用什么类型来代替 auto 关键字?

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

【问题讨论】:

  • 这是一种独特的、未命名的类型。
  • 什么都没有; auto 是获取精确类型对象的唯一方法,尽管您可以将 lambda 存储在可调用的持有者中,例如 std::function<>
  • @ildjarn decltype(auto) 也可以;)
  • @T.C. : 很公平。 :-P
  • @T.C.标记为 C++11...

标签: c++ c++11 lambda


【解决方案1】:

在这种情况下,C++11 中没有任何东西可以用来代替 auto,这意味着完全相同的类型。这是因为每个 lambda 表达式的类型都是唯一的、未命名的类型。引用 C++11 5.1.2/3:

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

【讨论】:

    【解决方案2】:

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

    This article详细解释:

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

    文章随后指出如何使用 std::function 代替,但会带来运行时损失。

    【讨论】:

      猜你喜欢
      • 2018-06-19
      • 1970-01-01
      • 2020-04-16
      • 2012-07-21
      • 2018-10-17
      • 2018-08-06
      • 2012-10-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多