这是我创建的代码片段:
auto f = [](auto a) -> auto {
cout << a << endl;
return a;
};
cout << f(12) << endl;
cout << f("test");
Run Code Online (Sandbox Code Playgroud)
这是我所知道的:类型必须在编译时全部解析/指定。
这里的问题是,当编译器看到这个 lambda 函数 f 时,它会如何表现?它如何推导出特定用途的所有类型,如第 6 行和第 7 行,我们可以看到每次调用 lambda 函数 f 时都会传递两个不同的参数。编译器是否创建 lambda 函数 f 的不同实例来匹配传递的类型?
任何帮助将不胜感激!
另外,如果答案技术性太强,无法用几行代码写出来,我将不胜感激有关 lambda 函数及其工作原理的任何良好参考。
我注意到的一件事是,以通常的方式定义函数时不允许使用 auto:
void f(auto a)
{
}
Run Code Online (Sandbox Code Playgroud)
这不能编译。
Lambda 基本上等同于仿函数类:
struct Lambda
{
template <typename T>
auto operator()(T a) const
std::cout << a << std::endl;
return a; // make auto deduce as T
}
};
Run Code Online (Sandbox Code Playgroud)
f(12)将实例化Lambda::operator()<int>
并将f("test")实例化Lambda::operator()<const char*>。
| 归档时间: |
|
| 查看次数: |
83 次 |
| 最近记录: |