C ++ lambda按值捕获而无需提前声明变量

Aka*_*ksh 2 c++ c++11

查看页面上的示例:

https://en.cppreference.com/w/cpp/algorithm/generate

它使用lambda:

std::generate(v.begin(), v.end(), [n = 0] () mutable { return n++; });
Run Code Online (Sandbox Code Playgroud)

该变量n未在lambda之前的任何地方声明。

在MSVC 14和GCC 9.1中尝试了此代码段后,它确实可以在两者上正常工作。

尝试在以下位置找到对此行为的引用:

https://en.cppreference.com/w/cpp/language/lambda

但找不到可以在lambda的捕获区域中声明新变量的地方。

这是预期的行为吗?有什么限制?

Som*_*ude 6

在链接到的参考中,它位于lambda捕获部分中,列表中的项目编号3。

然后再往下(在“ C ++ 14起”部分):

使用初始化程序进行捕获的方式就像声明并显式捕获使用类型声明的变量一样auto

[强调我的]

其中明确解释了该捕获子句的行为。