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

标签 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()

最佳答案

如您所说,通用 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/

相关文章:

c++ - 计算步数的基本情况背后的直觉

c++ - 你能在堆上声明一个指针吗?

c++ - C/C++ 中的 Int 类型

c++ - std::map 键的最快类型?

java - 如何使用 Java 流在 groupby 之后应用排序和限制

c++ - 试图返回一个用 `std::unique_ptr` 构造的 `NULL`

c++ - 了解弱引用计数器

c++ - vector::clear 在 libc++ 中用于简单可破坏的类型

c++ - 带有空捕获的 Lambda 表达式

javascript - 如何在无服务器框架中使用 jquery?