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