重用移动的容器:探索 C 0x 标准草案
当前的问题旨在阐明重用移动的容器的正确方法在 C .根据 C 0x 标准草案,处于“有效但未指定状态”的对象允许不需要前提条件的操作,除非首先验证了所述前提条件。
考虑提供的代码片段:
std::vector<int> container; container.push_back(1); auto container2 = std::move(container); // ver1: Do nothing //container2.clear(); // ver2: "Reset" container = std::vector<int>() // ver3: Reinitialize
向量容器被移动到container2,使容器处于未指定状态。根据标准,该状态允许无条件操作。因此,在容器2(版本2)上调用clear会将其返回到已知状态。
或者,使用版本3重新初始化容器也将达到所需的结果。此方法稍微迂回一些,但允许潜在的优化。然而,它也可能导致错误。
因此,重用已移动容器的正确方法是清除它或重新初始化它。版本 2 是首选,因为它显式地将容器重置为已知状态,并避免了与版本 3 相关的潜在陷阱。
以上是如何在 C 0x 中安全地重用移动的容器?的详细内容。更多信息请关注PHP中文网其他相关文章!