Moh*_*han 2 c++ stl move-constructor move-semantics
以下代码在GCC 4.9.3下引发错误.
#include <map>
using namespace std;
struct Movable {
Movable(const Movable&) = delete;
Movable(Movable&&) = default;
};
class Foo {
const map<int, Movable> m;
Foo(map<int, Movable>&& _m) : m{_m} {}
};
Run Code Online (Sandbox Code Playgroud)
潜在的错误是use of deleted function 'Movable::Movable(const Movable&)'- 但AFAICS它不应该试图复制底层的Movable.
由于_m有名称,使用时它是左值,你必须使用std::move:
class Foo {
const map<int, Movable> m;
Foo(map<int, Movable>&& _m) : m{std::move(_m)} {}
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
124 次 |
| 最近记录: |