首页 >后端开发 >C++ >自移动赋值是否可以与 C 标准库中的'std::vector”一起使用?

自移动赋值是否可以与 C 标准库中的'std::vector”一起使用?

Barbara Streisand
Barbara Streisand原创
2024-11-11 17:23:03215浏览

Does self-move assignment work with `std::vector` in the C   Standard Library?

C 标准库中的自移动分配

在 C 11 中,该标准提供了有关自移动分配的某些保证,特别是在标准内图书馆。让我们研究一下这些保证意味着什么。

根据 C 11 标准第 17.6.4.9 节,在“函数参数”主题下,规定如果函数参数绑定到右值引用参数,则实现可以假设此引用是参数独有的。

这意味着在 std::vector::operator=(vector&& other),允许假设 other 是纯右值。因此,如果 other 是纯右值,则自移动分配是不可行的。

可能发生的情况是 v 将呈现资源较少(容量为零)。如果 v 的容量已经为零,则此操作将是无操作。

更新:

最新的工作草案 (N4618) 提供了更精确的定义MoveAssignable 要求。它指定表达式 t = rv(其中 rv 是右值)要求 t 仅在赋值之前匹配 rv 的值(如果它们不引用同一对象)。无论如何,rv 的状态在赋值后变得不确定。附加注释提供了进一步的说明:

“rv 仍必须满足使用它的库组件的要求,无论 t 和 rv 是否引用同一对象。”

以上是自移动赋值是否可以与 C 标准库中的'std::vector”一起使用?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn