为什么Lambda参数不允许使用auto?

11

当我写一个带有以下签名的Lambda定义时:

auto lambda = [&] (auto i){


};

我遇到了以下编译器错误:

error: 'auto' not allowed in lambda parameter

当我将类型从auto更改为int时,错误消失了。
我不确定为什么编译器可以推断出lambda的类型,但不能推断出其参数类型,因为在调用lambda时应该已知其参数类型?
我试图理解这个限制背后的原因。

你使用的是哪个版本的C++? - NathanOliver
请至少编译为C++14。 - StoryTeller - Unslander Monica
2
通用lambda表达式是C++14及更高版本的功能。您的编译器显然在C++11模式下工作。 - AnT stands with Russia
请注意,使用该定义,lambda(5); lambda(5.5); lambda("foo"); 都是有效的调用。 - Zereges
1个回答

21

我不确定为什么编译器可以推断lambda表达式的类型,但不能推断它的参数类型,在调用lambda表达式时应该已知参数类型吧?

从C++14开始,编译器可以推断lambda表达式的参数类型。

auto lambda = [&] (auto i) { };

自从标准发布以来,这段代码是完全合法的,并称为<通用lambda函数>。

不幸的是,在之前,<通用lambda函数>是不可用的,因此,如果需要使用它们,则需要支持。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接