当我写一个带有以下签名的Lambda定义时: auto lambda = [&] (auto i){ }; 我遇到了以下编译器错误: error: 'auto' not allowed in lambda parameter 当我将类型从auto更改为int时,错误消失了。我不确定为什么编译器可以推断出lambda的类型,但不能推断出其参数类型,因为在调用lambda时应该已知其参数类型?我试图理解这个限制背后的原因。
我不确定为什么编译器可以推断lambda表达式的类型,但不能推断它的参数类型,在调用lambda表达式时应该已知参数类型吧? 从C++14开始,编译器可以推断lambda表达式的参数类型。auto lambda = [&] (auto i) { }; 自从标准发布以来,这段代码是完全合法的,并称为<通用lambda函数>。 不幸的是,在之前,<通用lambda函数>是不可用的,因此,如果需要使用它们,则需要支持。
lambda(5); lambda(5.5); lambda("foo");
都是有效的调用。 - Zereges