当我用以下签名编写lambda定义时:
auto lambda = [&] (auto i){
};
我得到以下编译器错误:
error: 'auto' not allowed in lambda parameter
当我将类型从auto
更改为int
,错误消失。
我不知道为什么编译器可以推导出lambda的类型,而不是它的参数类型,在调用lambda时应该知道它?
我试图理解这种限制背后的原因。
我不知道为什么编译器可以推导出lambda的类型,而不是它的参数类型,在调用lambda时应该知道它?
它可以,但仅限于C ++ 14 。
auto lambda = [&] (auto i) { };
这段代码完全合法,因为C ++ 14并称为泛型lambda 。
遗憾的是,在C ++ 14之前, 通用lambda不可用,因此,如果需要使用它们,则需要C ++ 14支持。