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

标签 c++ c++11

查看页面上的示例:

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 capture section 中,列表中的第 3 项。

再往下看(在“C++14 以来”部分):

A capture with an initializer acts as if it declares and explicitly captures a variable declared with type auto

[强调我的]

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

关于C++ lambda 按值捕获,无需提前声明变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56579764/

相关文章:

c++ - 从智能指针获取原始指针

c++ - 在没有 std::index_sequence 的人工层的情况下就地解压 std::tuple

c++ - 我可以在 C++ 的 find() 中使用\t 吗?

c++ - 警告 C4238 : nonstandard extension used : class rvalue used as lvalue

javascript - 如何在 C++ 内的 Google Native Client 中获取数组中值的总和?

C++ 在循环中捕获异常并在循环结束后重新抛出?

c++ - TreeView_SetExtendedStyle 不应用某些样式,我做错了什么?

c++ - 完美转发可变参数模板到标准线程

c++ - std::mutex 初始化异常

c++ - 如何循环继承自 boost::any 中包含的 std::vector 的类