答案 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
未被使用,因为它是未评估的操作数。因此,不需要捕获它。