对c++中自动关键字类型推断的疑问



下面是我创建的代码片段:

auto f = [](auto a) -> auto {
cout << a << endl;
return a;
};
cout << f(12) << endl;
cout << f("test");

这是我所知道的:类型必须在编译时全部解析/指定。

这里的问题是,当它看到这个lambda函数f时,编译器的行为如何?它是如何像第6行和第7行那样推导出所有特定使用的类型的?在第6行和第7行中,我们可以看到每次调用lambda函数f都传递了两个不同的参数。编译器是否创建了lambda函数f的不同实例来匹配传递的类型?

任何帮助将不胜感激!

另外,如果答案太技术性而不能在几行文字中写出来,我将非常感谢任何关于lambda函数及其工作原理的好的参考。

我注意到的一件事是,当以通常的方式定义函数时,不允许auto:

void f(auto a)
{
}

这个不能编译。

Lambda基本等同于函子类:

struct Lambda
{
template <typename T>
auto operator()(T a) const
std::cout << a << std::endl;
return a; // make auto deduce as T
}
};

f(12)将实例化Lambda::operator()<int>f("test")将实例化Lambda::operator()<const char*>

最新更新