包含 lambda 的变量类型

What type of variable that contain lambda

本文关键字:类型 变量 lambda 包含      更新时间:2023-10-16

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

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

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

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

您可以使用std::function而不是'auto,但您可能不想这样做。

本文将更详细地解释:

auto 背后的基本原则是编译器知道类型... 但你要么无法描述它,要么不想描述它。有一个 您无法命名类型的主要用例 – 使用 lambda。

然后,本文介绍了如何使用 std::函数,但需要运行时损失。