使用auto参数从lambdas返回值

时间:2015-03-19 23:22:07

标签: c++ c++11 lambda c++14

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

1 个答案:

答案 0 :(得分:9)

正如您所说,通用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返回类型的规则适用。在第一个函数中,第一个和唯一的return语句返回int,因此int被推断为返回类型。 const char*

也是如此