代码之家  ›  专栏  ›  技术社区  ›  user9196120

为什么lambda参数中不允许自动?

  •  8
  • user9196120  · 技术社区  · 7 年前

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

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

    我发现以下编译器错误:

    error: 'auto' not allowed in lambda parameter
    

    当我将类型从 auto int ,错误消失。

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

    我试图理解这一限制背后的原因。

    1 回复  |  直到 7 年前
        1
  •  19
  •   Edgar Rokjān    7 年前

    我不知道为什么编译器可以推断lambda的类型,但是 不是它的参数类型,在 lambda的调用?

    可以,但只能从 C++14 .

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

    此代码完全合法,因为 C++14 然后打电话给 通用lambda .

    不幸地 通用lambdas 之前不可用 C++14 ,因此,如果您需要使用它们, C++14 需要支持。