在 C++11 中什么时候应该选择 lambda 而不是函数指针?
When should I choose lambdas over function pointers in C++11?
可以在源代码中内联 lambda 函数。它们对于将这些过程作为参数传递给其他模块很有用。然而,这也可以通过函数指针来实现。关于在 C++11 中什么时候应该选择 lambda 而不是函数指针,是否有任何好的实践或经验法则?
如果您的 lambda 表达式不止几行(三行?),最好用它创建一个函数。
lambda 表达式可以捕获变量,创建一个具有与之关联的数据的闭包类型。您不能将数据绑定到函数指针,函数只能对其参数和全局数据进行操作。
选择 lambda 表达式而不是指向函数的指针。
我认为你不应该选择函数指针。相反,在 C++11 中你有函数对象和 lambda,lambda 被认为是匿名局部函数对象(尽管没有两个 lambda 表达式是相等的;它们没有 return 类型;它们是闭包类型)。
我认为它们是 C++ 支持的 C 的技术遗产。除非您正在使用 C 或遗留代码,否则您不妨考虑不要过多关注函数指针。
函数指针可以转换为不同的函数指针类型。
lambda 可以访问其作用域的变量,您可以在捕获列表中指定这些变量。
- 一个 lambda 可以比它的调用者活得更久(将 lambda 传递给不同的线程,或者存储以备后用)。当局部变量被不恰当地捕获(即通过引用)时,这可能是一个问题。
- lambda 的参数列表可以省略。 IE。最短的 lambda 是
[]{}
.
- lambda 表达式的 return 类型可以从它的主体中推断出来。
小且仅使用一次时:lambda
当不小或重用时:function object
可以在源代码中内联 lambda 函数。它们对于将这些过程作为参数传递给其他模块很有用。然而,这也可以通过函数指针来实现。关于在 C++11 中什么时候应该选择 lambda 而不是函数指针,是否有任何好的实践或经验法则?
如果您的 lambda 表达式不止几行(三行?),最好用它创建一个函数。
lambda 表达式可以捕获变量,创建一个具有与之关联的数据的闭包类型。您不能将数据绑定到函数指针,函数只能对其参数和全局数据进行操作。
选择 lambda 表达式而不是指向函数的指针。
我认为你不应该选择函数指针。相反,在 C++11 中你有函数对象和 lambda,lambda 被认为是匿名局部函数对象(尽管没有两个 lambda 表达式是相等的;它们没有 return 类型;它们是闭包类型)。
我认为它们是 C++ 支持的 C 的技术遗产。除非您正在使用 C 或遗留代码,否则您不妨考虑不要过多关注函数指针。
函数指针可以转换为不同的函数指针类型。
lambda 可以访问其作用域的变量,您可以在捕获列表中指定这些变量。
- 一个 lambda 可以比它的调用者活得更久(将 lambda 传递给不同的线程,或者存储以备后用)。当局部变量被不恰当地捕获(即通过引用)时,这可能是一个问题。
- lambda 的参数列表可以省略。 IE。最短的 lambda 是
[]{}
. - lambda 表达式的 return 类型可以从它的主体中推断出来。
小且仅使用一次时:lambda
当不小或重用时:function object