return 来自带有自动参数的 lambda 的值

return values from lambdas with auto parameter

我正在玩 lambda 表达式,我正在使用 auto 作为输入参数。

我试过下面这段代码

auto f2 = [](auto a){ return a;};
std::cout << f2(10) << std::endl;
std::cout << f2("hi there!") << std::endl;

令我大吃一惊的是它可以编译并且 运行 ok!这怎么可能?

如果我没记错(这是 C++14 附带的),函数对象的 operator() 是模板,因为它使用 auto 作为输入参数。

它如何管理多个 return 类型?第一行 returns 一个 int 和第二行 returns 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 return 类型的规则适用。在第一个函数中,第一个也是唯一一个 return 语句 return 是一个 int,因此 int 被推导出为 return 类型。 const char*

相同