什么时候应该在C ++ 11中选择lambdas而不是函数指针?

时间:2015-12-01 14:04:06

标签: c++11 lambda function-pointers

可以在源代码中内联lambda函数。将这些过程作为参数传递给其他模块非常有用。但是,这也可以通过函数指针来实现。是否有任何良好实践或经验法则关于我何时应该在C ++ 11中选择lambdas而不是函数指针?

3 个答案:

答案 0 :(得分:4)

lambda表达式可以捕获变量,创建一个具有与之关联的数据的闭包类型。您无法将数据绑定到函数指针,该函数只能对其参数和全局数据进行操作。

答案 1 :(得分:1)

如果你的lambda表达式超过几行(三个?),最好用它来创建一个函数。

答案 2 :(得分:1)

选择指向函数的lambda表达式。

我认为你不应该选择函数指针。相反,在C ++ 11中你有函数对象和lambda,一个lambda被认为是一个匿名的本地函数对象(虽然没有两个lambda表达式是相同的;它们没有返回类型;它们是闭包类型)。

我认为它们是C ++支持的C技术遗产。除非您使用C或遗留代码,否则您可以考虑不要过多关注函数指针。

  • 指向函数的指针可以转换为不同的指针到函数类型。

  • lambda可以访问其范围的变量,您可以在捕获列表中指定这些变量。

  • lambda可以比它的调用者更长(将lambda传递给不同的线程,或者存储起来供以后使用)。当局部变量被不适当地捕获时(即通过引用),这可能是一个问题。
  • 可以省略lambda的参数列表。即最短的lambda是[]{}
  • lambda表达式的返回类型可以从它的正文中推断出来。

小时只使用一次:lambda
当不小或重用时:功能对象