正如您所说,泛型lambda的
我正在使用lambda表达式,并使用auto
作为输入参数。
我确实在下面尝试了这个代码
auto f2 = [](auto a){ return a;};
std::cout << f2(10) << std::endl;
std::cout << f2("hi there!") << std::endl;
让我大吃一惊的是,它的编译和运行都很好!这怎么可能?
如果我没有错的话(这是C++14附带的),函数对象的operator()
是模板,因为它使用auto
作为输入参数。
它如何管理多种退货类型?第一行返回一个int
,第二行返回const char*
。
编译器是否在幕后创建多个operator()
?
operator()
实际上是一个函数模板。类似于:
struct noname
{
template<typename T>
auto operator ()(T a) const { return a; }
};
您的单独调用实例化了两个不同的函数。
auto operator ()(int a) const { return a; }
auto operator ()(const char* a) const { return a; }
在此基础上,适用auto
返回类型的规则。在第一个函数中,第一个也是唯一一个返回语句返回一个int
,因此int
被推导为返回类型。与const char*
相同