为什么lambda参数中不允许auto?

use*_*120 3 c++ lambda auto

当我用以下签名编写lambda定义时:

auto lambda = [&] (auto i){


};
Run Code Online (Sandbox Code Playgroud)

我得到以下编译器错误:

error: 'auto' not allowed in lambda parameter
Run Code Online (Sandbox Code Playgroud)

当我从更改类型auto来int,错误消失.

我不知道为什么编译器可以推导出lambda的类型,而不是它的参数类型,在调用lambda时应该知道它?

我试图理解这种限制背后的原因.

Edg*_*jān 9

我不知道为什么编译器可以推导出lambda的类型,而不是它的参数类型,在调用lambda时应该知道它?

它可以,但仅限于C++ 14.

auto lambda = [&] (auto i) { };
Run Code Online (Sandbox Code Playgroud)

这段代码完全合法,因为C++ 14并称为泛型lambda.

遗憾的是,在C++ 14之前,通用lambda不可用,因此,如果需要使用它们,则需要C++ 14支持.