gpt4 book ai didi

c++ - 捕获 lambda 无法捕获 range-for 循环的命名变量

转载 作者:搜寻专家 更新时间:2023-10-31 00:53:19 27 4
gpt4 key购买 nike

Visual Studio 2015 Update 3 无法使用 /std:c++14 编译以下代码段:

[] {
int values[] = {1,2,3};

for (int n : values)
{
[&] {
std::cout << n << std::endl; // 'n': undeclared identifier
}();
}
}();

另一方面,它似乎是用 gcc 和 clang 编译的。它是 MSVC 中的错误吗?有什么解决方法?

最佳答案

它在最新最好的 2017 预览版 15.6.1 中仍然这样做。我提交了错误报告。我们会看看他们怎么说。问题似乎是变量是在基于范围的 for 循环中声明的。以下编译并运行:

#include <iostream>

int main()
{
[] {
int values[] = {1,2,3};
const auto e = std::end(values);
for(auto it = std::begin(values); it!=e; ++it) {
auto n = *it;
[&] {
std::cout << n << std::endl;
}();
}
}();

return 0;
}

这样做也是如此:

#include <iostream>

int main()
{
[] {
int values[] = {3,2,99};
const auto e = std::end(values);
for(auto it = std::begin(values); it!=e; ++it) {
[&] {
std::cout << *it << std::endl;
}();
}
}();

return 0;
}

关于c++ - 捕获 lambda 无法捕获 range-for 循环的命名变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49203739/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com