【发布时间】:2015-03-19 23:22:07
【问题描述】:
我正在使用 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()? 是的,函数模板每次使用不同的模板参数实例化时都会创建不同的函数。 lambda 没有做任何特别的事情。