gpt4 book ai didi

c++ - Visual Studio 2015 中的广义 Lambda 捕获表达式 : Compiler bug or correct behavior?

转载 作者:行者123 更新时间:2023-11-30 05:22:28 24 4
gpt4 key购买 nike

我正在尝试将 vector 移动到 lambda 中,但出现编译错误:

std::vector<int> vec {1,2,3};
auto lambda = [vec2 = std::move(vec)](){
vec2.push_back(1);
}

错误是错误 C2663:“2 重载没有‘this’指针的合法转换”它在 vec2.push_back(1)

行中生成

当我把例子改成

std::vector<int> vec {1,2,3};
auto lambda = [vec2 = std::move(vec)](){
auto vec3 = std::move(vec2);
vec3.push_back(1);
}

它编译并工作。

那么这种行为是否正确,如果正确,为什么不能修改 vec2

最佳答案

您的代码问题与广义 lambda 捕获无关。默认情况下,lambda 的调用运算符是 const,因此,lambda 捕获的对象将被视为 const。您可以使用 mutable 关键字。这将使 lambda 的调用运算符成为非 const,允许您修改捕获的对象。

std::vector<int> vec {1,2,3};
auto lambda = [vec2 = std::move(vec)]() mutable {
vec2.push_back(1); // ^ note
}

关于c++ - Visual Studio 2015 中的广义 Lambda 捕获表达式 : Compiler bug or correct behavior?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39654449/

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