【发布时间】:2015-04-29 20:43:48
【问题描述】:
我有一些关于何时使用auto的问题
- 明确,尽管有上下文,这不是更清楚吗?
- 最好是明确的而不是
auto的案例?
而 lambda 函数如何使用 auto 这些
auto f = [](auto v, auto x) {};
//or
std::function<void(auto v, auto x)> f;
谢谢...
【问题讨论】:
-
您提供的两行代码做了两件非常不同的事情。 Lambda 是一种情况,您实际上必须使用 auto,因为它们的类型只有编译器知道。 This 可能对你来说很有趣。
-
@MikeMB 我不知道。这两行都不能编译,所以他们做同样的事情。一行更接近编译? (仅缺少 2 个字符)。另一个包含从 C++14 开始对
auto的基本误解。 -
@Yakk:你说得对,尤其是函数版本没有任何意义。但是 lambda 和 std::function 在它们代表的内容和存储方式上有着根本的不同。每个 lambda 都是一个具有自己类型的函数对象,并在堆上创建。
std::funcion是包装器,例如可以包装不同的函数或函数对象,只要它们具有正确的接口即可。很可能我也误解了这个问题,因为我专注于何时将 auto 用于变量,而不是用于 lambda 的参数类型推导。 -
@mike lambdas 不使用免费存储/堆存储...并非没有帮助。
-
@Yakk:对不起,我的意思当然是“堆栈”为时已晚
标签: c++ lambda auto c++14 std-function