gpt4 book ai didi

c++ - 使用自动参数从 lambdas 返回值

转载 作者:可可西里 更新时间:2023-11-01 16:37:29 25 4
gpt4 key购买 nike

我在玩 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 返回类型的规则适用。在第一个函数中,第一个也是唯一一个 return 语句返回一个 int,因此 int 被推断为返回类型。 const char*

相同

关于c++ - 使用自动参数从 lambdas 返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29156749/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com