21xrx.com
2024-12-22 23:41:08 Sunday
登录
文章检索 我的文章 写文章
C++ lambda表达式的作用
2023-07-05 03:46:50 深夜i     --     --
C++ Lambda表达式 作用

C++ lambada表达式是一种比较新的语言特性,它可以用来创建一个 匿名函数,这个函数可以被当作一个参数传递给其他的函数。在C++11标准中, 引入了lambda表达式,使得C++这门语言不仅能够像其他现代语言一样,更加方便的支持面向对象编程还能够支持面向函数编程。

λ表达式语法

C++ lambda表达式的通用语法如下所示:


[capture list] (parameters) -> return_type { body }

它包括三个部分:

1. 捕获列表(capture list):捕获列表指定 lambda 表达式中可以使用哪些 外部变量。捕获列表包括捕获传值的变量,引用变量和隐含变量。

2. 参数(parameters):指定 lambda 表达式的参数列表,可以为空。

3. 函数体(body):Lambda 表达式的函数体。

使用λ表达式

Lambda 表达式可以用于三种不同的上下文中:

1. 作为参数传递给其他函数;

2. 作为 std::function 对象传递(类似于函数指针);

3. 作为表达式传递。

作为参数传递给其他函数

函数参数可以是一个 lambda 表达式,例如:


void doSomething(const std::function<void()>& f)

{

  f();

}

int main()

{

  int n = 5;

  doSomething([&]

  

    std::cout << "n=" << n << std::endl;

  );

}

上面的代码中,我们通过函数模板 std::function 定义了一个可以接受任意函数对象的函数 doSomething,然后我们使用 [] [=] 来捕获所有的外部变量,lambda 体中的代码通过输出 n 的值。最后,我们调用 doSomething 函数,并将 Lambda 表达式作为参数传递进去。

作为 std::function 对象传递

另一种使用 lambda 表达式的方法是将其转换为 std::function 对象。这可以将它用作函数指针一样的东西,例如:


std::function<double(double)> f = [](double x) { return x * x; };

double y = f(2.5); // square of 2.5

这里,我们定义了一个计算平方的 Lambda 表达式,并将其复制到 std::function 对象 f 中。在下一行中,我们调用 f 并将其传递给 2.5,从而计算 2.5 的平方。

作为表达式传递

最后,lambda 表达式还可以像其他表达式一样使用,例如:


int main()

{

  auto f = []() return "Hello;

  std::cout << f() << std::endl;

}

这里,我们定义了一个 lambda 表达式,该表达式返回 "Hello, World!",并通过调用 f()函数获得了该值。最后,我们将结果打印到控制台。

总结

C++ Lambda 表达式是一种非常灵活的编程工具,它能够通过创建匿名函数来执行特定的操作,从而简化代码和提高可读性。通过理解所有三种使用 lambda 表示式的场景,您可以轻松掌握使用方法并获得更好的编程体验。

  
  

评论区

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