【发布时间】:2016-04-05 08:58:38
【问题描述】:
在this article中,出现如下代码:
std::vector<int> ivec = { 1, 2, 3, 4};
std::vector<std::string> svec = { "red", "green", "blue" };
auto adder = [](auto op1, auto op2){ return op1 + op2; };
std::cout << "int result : "
<< std::accumulate(ivec.begin(),
ivec.end(),
0,
adder)
<< "\n";
std::cout << "string result : "
<< std::accumulate(svec.begin(),
svec.end(),
std::string(""),
adder)
<< "\n";
如果我理解正确的话,编译器会生成一个类似这样的内部类:
template<class T>
class _lambda
{
public:
T operator()(T lhs, T rhs) { return lhs + rhs; }
};
但我不明白的是,在这段代码中,adder 似乎同时有两种类型:_lambda<int> 和_lambda<string>。这怎么可能?
【问题讨论】:
标签: c++ lambda c++14 type-deduction