Bar*_*uch 18 c++ lambda move-semantics c++11
我正在尝试编译以下代码:
#include <utility>
struct C2 {
C2() = default;
C2(C2 const&) = delete;
C2(C2&&) = default;
};
int main() {
C2 p2;
([p2_1{ std::move(p2) }]() {
auto p2_2 = std::move(p2_1); // <---
})();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但是,这不会编译并给出一个错误,即赋值p2_2为调用已删除的函数,即复制构造函数.请注意,搬迁p2_1很好.为什么这不使用移动构造函数?
Nat*_*ica 27
这里的问题是operator()lambda表示的匿名类类型是const默认的.这意味着你不能移动,p2_1因为thislambda const&在函数中.你需要做的是使用mutable关键字like
int main() {
C2 p2;
([p2_1{ std::move(p2) }]() mutable {
auto p2_2 = std::move(p2_1); // <---
})();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这使得函数non const反过来意味着你可以改变它的成员.这允许您移动p2_1而不是尝试复制它.
| 归档时间: |
|
| 查看次数: |
846 次 |
| 最近记录: |