这是我创建的代码片段:
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)
这不能编译。