标准库容器中的自移动赋值
C 11 标准保证自移动赋值(对象在对象被赋值后为其自身赋值)对于像 std::vector 这样的标准库容器来说,这是不可能的。
标准中的具体规定可以在 [res.on.arguments] 中找到,其中规定绑定到右值引用的函数参数是考虑对其绑定参数的唯一引用。这意味着实现可以假设参数与赋值目标引用的对象不同。
对于 std::vector,移动赋值运算符 (operator=) 定义为获取右值引用。因此,当使用 std::vector 参数调用 selfAssign() 时,标准允许实现假设该参数是对临时对象的唯一引用。因此,自移动分配是不可能的,并且 std::vector 将处于无资源状态(0 容量)。
但是,重要的是要注意,此行为仅保证标准库容器。对于用户定义类型,C 11 标准不提供任何有关自移动分配的保证。
以上是为什么 C 11 中的标准库容器不允许自移动分配?的详细内容。更多信息请关注PHP中文网其他相关文章!