作者:本多天舞 | 来源:互联网 | 2022-12-09 10:21
在以下代码中
#include
#include
#include
void f1(std::unique_ptr&& uptr) {}
void f(std::unique_ptr&& uptr)
{
auto thread = std::thread([uptr{ std::move(uptr) }]() {
f1(std::move(uptr));
});
}
int main()
{
return 0;
}
对std::move
lambda内部的调用无法编译:
[x86-64 gcc 8.1 #1] error: binding reference of type'std::unique_ptr&&'
to 'std::remove_reference std::unique_ptr&>::type'
{aka 'const std::unique_ptr'} discards qualifiers
现场演示:https://godbolt.org/g/9dQhEX
为什么会出现此错误,如何解决?哪里const
来的?
1> lubgr..:
你需要制作lamdba,mutable
因为const
默认情况下闭包变量是限定的.
auto thread = std::thread([uptr{ std::move(uptr) }]() mutable {
//^^^^^^
f1(std::move(uptr)); /* Works, no constness-violation.*/
});
'const`-ness是默认的少数几个地方之一.我希望它更多.