使用auto参数从lambdas返回值



我正在使用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()

正如您所说,泛型lambda的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* 相同

最新更新