Lambda:未评估上下文中的未捕获对象

时间:2019-10-07 05:45:31

标签: c++ lambda language-lawyer c++17

我很高兴看到指向标准段落的指针,指出following code的格式正确:

Customer

出现类似的示例,例如在8.4.5.2节中,但我找不到任何口头描述。

1 个答案:

答案 0 :(得分:6)

它是根据必须捕获实体 的时间来指定的,而不是根据何时不可以捕获它的方式来指定。

  

[expr.prim.lambda.capture] (有一些遗漏)

     

8 ...如果是lambda表达式或函数的实例化   通用Lambda odr的调用运算符模板-使用此变量或变量   从其到达范围开始自动存储,该实体   应该由lambda表达式捕获。 ...

     

[示例:

void f1(int i) {
  int const N = 20;
  auto m1 = [=]{
    int const M = 30;
    auto m2 = [i]{
      int x[N][M];          // OK: N and M are not odr-used
      // ...
    };
  };
  // ...
}
     

-示例]

代码示例中的关键是var未被使用,因为它是未评估的操作数。因此,不需要捕获它。