Mat*_*t G 5 c++ gcc move-semantics gcc4.9
当unordered_set在GCC 4.9上移出,然后重新使用移动的对象时,我在添加它时会得到除零.
我的理解(来自http://en.cppreference.com/w/cpp/utility/move)是可以使用移动的对象,前提是它没有违反任何先决条件.调用clear()移动的集合很好(这在前置条件的上下文中是有意义的),但是我不清楚我是否通过添加新元素来违反任何先决条件.
示例代码:
#include <unordered_set>
using namespace std;
void foo(unordered_set<int> &&a) {
unordered_set<int> copy = std::move(a);
}
void test() {
unordered_set<int> a;
for (int i = 0; i < 12; ++i) a.insert(i);
foo(std::move(a));
a.clear();
a.insert(34); // divide by zero here
}
int main() {
test();
}?
Run Code Online (Sandbox Code Playgroud)
这段代码在GCC4.7上运行正常 - 这是GCC4.9 unordered_set实现中的一个问题,还是我理解违反移动对象的前提条件意味着什么?