提问人:rstr1112 提问时间:9/27/2022 更新时间:9/27/2022 访问量:54
在 Lambda 表达式中将引用捕获为值
Capturing reference as value in Lambda expressions
问:
int TestMethod(const std::map<std::string, std::string>& map)
{
auto m1 = [map=map]()
{
// is map here captured as reference or value ?
std::cout << map.at("test") << std::endl;
return 1;
};
return m1();
}
里面,是作为价值还是作为参考?
PS 这只是一个简单的例子,m1 在另一个线程上被调用有时会抛出一个m1
map
异常类型:EXC_BAD_ACCESS (SIGSEGV) 异常代码:
0x0000000000000001、0x0000000000000010
编译器是 C++17 ,在 MAC 上叮叮当当。
答:
0赞
Enlico
9/27/2022
#1
这是通过复制捕获的。 将是引用捕获。[&map=map]
下一个:结构中类的语义
评论
map
map
[map]
[map=map]
地图
是作为值捕获还是作为参考?- 确定这一点的一个简单方法是查看 lambda 外部的内存地址与 lambda 内部的内存地址。如果它们不同,则按值捕获。如果它们相同,则通过引用进行捕获。map
map
&
this