c++ - 在 C++ 中使用 auto 声明 lambda 变量的首选方法是什么?

标签 c++ c++11 lambda

有人了解使用 auto 声明 lambda 变量的各种方法的优缺点吗?
例如:

 auto Val = [] { };           // #1
 const auto &LVRef = [] { };  // #2
 auto &&RVRef = [] { };       // #3

有人能想出一个令人信服的理由来让自己不总是选择#1吗?

我想对于模板函数,声明可调用参数的首选方法是使用通用引用?

template<class F> void foo(F&& f) { f(); }

或者大多数指南更喜欢将其声明为非引用参数?

template<class F> void foo(F f) { f(); }

谢谢!

最佳答案

Can anyone think of a compelling reason to not always prefer #1?

没有。 #1 更简单,并且与其他选项相比没有性能损失。

采用仿函数的算法通常只是按值获取它们,但如果您想保证不会因某种原因复制仿函数,则使用通用引用是合理的。如果您编写的内容只是转发仿函数,那么请使用通用引用。

关于c++ - 在 C++ 中使用 auto 声明 lambda 变量的首选方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22918762/

相关文章:

c# - 在泛型集合的泛型方法上使用表达式lambda

c++ - 不能使用 boost::bind 访问 boost::tuple 元素

c++ - std::unique_ptr 用于需要免费的 C 函数

c++ - 标准库容器迭代器的递增/递减迭代器是确定性的吗?

C++11 模板函数 "implicity"将 bitset<N> 转换为 "unsigned long"

c++ - 具有左值和右值的可变参数模板类构造函数

c++ - 在 map 中使用 lambda 作为比较器时的匿名类型警告

lambda - 为什么Java 8中的lambda不允许对匿名类不允许的成员变量进行前向引用?

html - 如何使用 tidy 删除所有 HTML 标签

c++ - 如何配置 CMakeLists.txt 以安装共享库的公共(public) header ?