首页 > 后端开发 > C++ > 正文

为什么 C 11 中的标准库容器不允许自移动分配?

Patricia Arquette
发布: 2024-11-16 02:49:03
原创
353 人浏览过

Why is Self Move Assignment Not Allowed for Standard Library Containers in C  11?

标准库容器中的自移动赋值

C 11 标准保证自移动赋值(对象在对象被赋值后为其自身赋值)对于像 std::vector 这样的标准库容器来说,这是不可能的。

标准中的具体规定可以在 [res.on.arguments] 中找到,其中规定绑定到右值引用的函数参数是考虑对其绑定参数的唯一引用。这意味着实现可以假设参数与赋值目标引用的对象不同。

对于 std::vector,移动赋值运算符 (operator=) 定义为获取右值引用。因此,当使用 std::vector 参数调用 selfAssign() 时,标准允许实现假设该参数是对临时对象的唯一引用。因此,自移动分配是不可能的,并且 std::vector 将处于无资源状态(0 容量)。

但是,重要的是要注意,此行为仅保证标准库容器。对于用户定义类型,C 11 标准不提供任何有关自移动分配的保证。

以上是为什么 C 11 中的标准库容器不允许自移动分配?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板