21xrx.com
2024-11-22 06:51:30 Friday
登录
文章检索 我的文章 写文章
C++14 Lambda表达式
2023-07-05 03:12:53 深夜i     --     --
C++14 Lambda表达式 匿名函数 函数式编程 闭包

C++14 是 C++ 标准的一个版本,它引入了许多新功能,其中包括 Lambda 表达式。Lambda 表达式是一种匿名函数,它可以被用于创建可调用对象。使用 Lambda 表达式可以使我们更方便地编写代码,同时也可以提高程序的可读性和可维护性。

在 C++14 中,Lambda 表达式的基本语法如下:


[capture-list] (parameter-list) -> return-type { function-body }

其中,capture-list 可以用来捕获变量,parameter-list 则是 Lambda 表达式中的参数列表,return-type 是 Lambda 表达式的返回类型,而 function-body 则是 Lambda 表达式的函数体。

Lambda 表达式的参数可以使用任意类型,甚至是自定义类型。在函数体中,我们可以使用相同的方式来访问参数和捕获的变量。例如,我们可以在 Lambda 表达式中使用捕获的变量,如下所示:


int a = 10;

auto func = [a](int x) -> int { return a + x; };

int result = func(5); // result = 15

在上面的代码中,我们首先定义了一个整型变量 a,并将它的值设置为 10。然后我们创建了一个 Lambda 表达式 func,该表达式捕获了变量 a,并接受一个整型参数 x。函数体中返回的是 a + x 的结果。最后,我们调用了这个 Lambda 表达式,并将参数设为 5,结果为 15。

除了使用捕获列表捕获变量之外,Lambda 表达式还可以使用默认值来捕获变量。这意味着我们可以直接访问当前作用域中的变量,而不必显式地将它们添加到捕获列表中。

Lambda 表达式还可以用于实现函数对象。这意味着我们可以将它们作为参数传递给函数,或者将它们存储在容器中。例如,我们可以使用 Lambda 表达式实现一个回调函数,如下所示:


void foo(std::function<void(int)> callback)

{

  callback(42);

}

int main()

{

  foo([](int result) std::cout << "Result: " << result << std::endl; );

  return 0;

}

在上面的代码中,我们定义了一个名为 foo 的函数,该函数接受一个 std::function 对象作为参数。Lambda 表达式被用作回调函数,它接受一个整型参数并将其打印到控制台上。在 main 函数中,我们调用 foo 并将 Lambda 表达式作为参数传递给它。结果会打印“Result: 42”。

总之,Lambda 表达式是 C++14 中一个非常强大的功能。使用 Lambda 表达式可以帮助我们更方便地编写代码,并提高程序的可读性和可维护性。它们可以用于捕获变量、实现函数对象以及作为回调函数等方面。因此,对于 C++ 开发人员来说,了解 Lambda 表达式是非常重要的。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复