当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();
}
此代码在 GCC4.7 上运行良好 - 这是 GCC4.9unordered_set
实现中的问题,还是我理解违反移出对象的先决条件意味着什么?