[英]C++ lambda capture by value without declaring variable earlier
查看页面上的示例:
https://en.cppreference.com/w/cpp/algorithm/generate
它使用lambda:
std::generate(v.begin(), v.end(), [n = 0] () mutable { return n++; });
变量n
不在lambda之前的任何地方声明。
在MSVC 14和GCC 9.1中尝试了此代码段后,它确实可以在两者上正常工作。
尝试在以下位置找到对此行为的引用:
https://en.cppreference.com/w/cpp/language/lambda
但找不到可以在lambda的捕获区域中声明新变量的地方。
这是预期的行为吗? 有什么限制?
在您链接到的参考中,它位于lambda捕获部分中 ,列表中的项目编号3。
然后再往下(在“ C ++ 14起”部分):
使用初始化程序进行捕获的方式就像声明并显式捕获使用
auto
类型声明的变量一样
[强调我的]
其中明确解释了该捕获子句的行为。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.