在C ++ 14中使用相同的lambda函数和不同的参数类型

时间:2014-12-13 23:33:51

标签: c++ c++14

我今天正在玩C ++ 14和lambda函数,并尝试编写以下代码:

#include <iostream>

auto getAddFunction() {
  return [](auto x, auto y) {
    return x+y;
  };
}

int main()
{
  auto func = getAddFunction();

  int x = 3, y = 4;
  int z = func(x, y);
  std::cout << z << std::endl;

  double a = 3.5, b = 4.7;
  double c = func(a, b);
  std::cout << c << std::endl;

  std::complex<double> e {1, 2};
  std::complex<double> f {3, 4};
  std::complex<double> g = func(e, f);
  std::cout << g << std::endl;

  return 0;
}

我尝试编译代码,我得到了下面的结果,这是正确的结果:

7
8.2
(4,6)

如果使用模板定义函数getAddFunction,我就不会理解编译器如何能够产生正确的结果。但是,它是使用auto定义的,据我所知,编译器会尝试猜测类型,而不是像模板一样为函数生成多个实体。但是这里似乎发生的事情正是模板会发生什么,即编译器为每种不同的数据类型生成多个函数体,即使我使用的是相同的lambda函数变量!

任何人都有解释为什么会这样?

0 个答案:

没有答案