首页 > 后端开发 > C++ > `std::string` 的写时复制实现在 C 11 中合法吗?

`std::string` 的写时复制实现在 C 11 中合法吗?

Patricia Arquette
发布: 2024-12-15 03:28:08
原创
812 人浏览过

Is a Copy-on-Write Implementation of `std::string` Legal in C  11?

C 11 中 std::string 的 COW 实现:合法性和限制

写时复制 (COW) 是一种常见的技术用于通过推迟创建新对象的成本直到实际修改该对象来提高性能。然而,有人质疑 COW 是否是在 C 11 中实现 std::string 的有效方法。

对 COW 实现的限制

根据 C 11 标准(21.4.1 p6),迭代器和引用的无效仅在特定情况下允许情况:

  • 当作为参数传递给引用非常量 basic_string 的标准库函数时。
  • 调用非常量成员函数时,不包括operator[], at、front、back、begin、rbegin、end 和 rend。

对于 COW 字符串实现,调用非常量运算符[] 需要制作副本并使引用无效。这是上述段落所禁止的。因此,基于 COW 实现 std::string 在 C 11 中不再被视为合法。

显式限制声明

标准没有明确声明禁止基于 COW 的 std::string 实现。但是,明确限制失效场景的要求组合隐含了该限制。

结论

虽然 COW 在早期版本中是 std::string 的可行实现C 中,C 11 规范引入了约束,由于不允许引用失效,因此禁止基于 COW 的实现。

以上是`std::string` 的写时复制实现在 C 11 中合法吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

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