C++11 和 C++03 在对 std::string 小字符串优化的支持方面有所不同?

2023-11-24

在C++11标准的兼容性附录中,C++03到C++11的变化之一描述如下:

C.2.11 第 21 条:字符串库
21.4.1
Change: 放宽 basic_string 失效规则
基本原理:允许小字符串优化。
对原始特征的影响:可以执行有效的 C++ 2003 代码 本国际标准有所不同。一些常量成员 函数(例如 data 和 c_str)不再使迭代器无效。

迭代器失效规则std::string确实从 C++03 更改为 C++11data() and c_str()不再允许使迭代器无效,但我不知道这如何导致“allow small-string optimization“?在 C++11 之前不是已经允许 SSO 了吗?


其中两个区别是std::string在我发现兼容性附录中的 SSO 注释之前,我所知道的 C++11 和 C++03 之间的关系是:

  • C++11 中保证元素连续存储
  • COW 实现不是 C++11 中的一个选项(某些操作,例如operator[]不允许使迭代器无效)

我采用了 C++11 的非无效保证c_str() and data()这是向连续存储转变的直接结果。现在看来和SSO的实现有一些联系,我想了解一下幕后逻辑的细节。谢谢。


我相信您误解了“更改”:这并不是指无效规则data and c_str,而是那些swap.

这个问题给了我这个想法,当我阅读您的引言和链接的问题/答案时,我认为我是正确的。

Since basic_string的交换可以使迭代器无效,可以实现 SSO。在 C++03 中,basic_string是一个可翻转的容器,这意味着它必须符合这一要求swapping 容器:

对于除数组之外的标准容器类型的容器 a 和 b,表达式 a.swap(b) 应交换 a 和 b 的值,而不对各个容器元素调用任何移动、复制或交换操作。

不过,我可能大错特错了,IANALL(我不是语言律师)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++11 和 C++03 在对 std::string 小字符串优化的支持方面有所不同? 的相关文章

随机推荐

  • Eclipse 在每次保存时构建所有类

    我的工作区中有一个大型项目 每次我保存 jsp 或任何文件 java txt 属性等 时 构建都会运行 构建大约需要 30 到 45 秒 我恨它 我无法像这样高效工作 这种情况最近才开始发生 我一直启用自动构建 这不会导致此问题 办公室里的
  • 为什么当我在此处将 CREATE PROCEDURE 语句与 IF 语句一起使用时,它会失败?

    我试图删除存储过程 如果存在 然后通过以下方式创建它 IF OBJECT ID dbo myStoredProc IS not NULL DROP PROCEDURE dbo myStoredProc CREATE PROCEDURE db
  • 将 PHP cURL 请求从 SSLv3 更新为 TLS..?

    因为最近在 SSLv3 中发现的漏洞 许多网络服务提供商 即 PayPal Facebook Google 正在禁用该功能 并希望我们改用 TLS 我在弄清楚如何执行此操作时遇到了一些麻烦 我目前正在使用以下函数来处理我的 cURL 请求
  • 添加事件监听器到事件监听器添加的表单元素

    我正在构建一个 Symfony 应用程序 并使用表单事件和一些 jquery ajax 来完成整个 状态 地点 的事情 不过 我有一个小问题 我使用的格式是省 gt 城市 gt 郊区 现在 据我所知 我的代码很好 但是当执行到达我向 城市
  • 使用 twig 和 Slim 框架上传文件(版本 2)- PHP

    我正在使用 UserFrosting 一个用户管理系统 但在通过表单发布上传文件时遇到一些问题 这就是我尝试过的 这就是我的树枝文件的样子
  • 如何并行等待多个阻塞队列?

    我有两个独立的阻塞队列 客户端通常使用第一个或第二个阻塞队列来检索要处理的元素 在某些情况下 客户端对两个阻塞队列中的元素感兴趣 无论哪个队列首先提供数据 客户端如何并行等待两个队列 您可以尝试使用poll某种循环中的方法 仅在轮询另一个队
  • 可选实体框架复杂类型所需的属性

    我想定义 Required 实体框架中复杂类型的属性 例如 我有一个Customer具有可选实体Address 地址实体有一个必需的PostCode财产 ComplexType public class Address public str
  • 如何在java eclipse中将其他maven项目的依赖添加到我当前的maven项目中?

    我想在我的maven项目1中使用maven项目2类 这样我就可以将它用作父类 你能告诉我如何使用 eclipse 和 JAVA 来做到这一点吗 请写下逐步导航 因为我是 Maven 新手 提前致谢 我知道为时已晚但这可以帮助其他正在寻找同样
  • Excel VBA高效获取文件名函数

    我需要使用 Excel 2010 中的 VBA 从远程服务器上的文件夹中获取文件名集合 我有一个可以工作的函数 并且在大多数情况下它可以完成这项工作 但是远程服务器经常出现糟糕的情况 terrible网络性能问题 这意味着循环遍历 300
  • 异常处理指南 - Python 与 Java

    我是原始的 Java 开发人员 对我来说 Java 中的检查异常显然 很容易让我决定捕获它或将其扔给调用者稍后处理 然后是Python 没有受检查的异常 所以从概念上讲 没有什么会强迫你处理任何事情 根据我的经验 如果不检查文档 你甚至不知
  • 获取backstack中最新的fragment

    如何获取添加到 backstack 中的最新片段实例 如果我不知道片段标签和 id FragmentManager fragManager activity getSupportFragmentManager FragmentTransac
  • Android:如何制作 GroupBox 小部件?

    Android 似乎没有提供如此有用的小部件 但是 我的屏幕设计需要这样的视图 此外 交互设计要求根据其他数据显示和隐藏此类框 当然 我可以从 XML 布局中的单独元素 例如 从其上的形状和文本视图 构造这样的框 但管理它们的可见性会变得很
  • PhpMyAdmin 错误:令牌不匹配

    我最近在 xampp 上的 apache 上安装的本地安装中遇到错误 我正在运行 phpmyadmin v4 0 5 错误描述为错误 令牌不匹配 有其他人经历过这个并找到解决办法吗 您可以尝试以下方法 找到 XAMPP php ini 文件
  • 在 RMarkdown 的输出中显示代码块名称

    正如 RMarkdown 中所知 代码块可以这样命名 r chunkname plot x y 是否可以在输出文档中显示块名称 您可以使用knitr opts current get label example r cars library
  • 什么 Java 数据类型对应于 Oracle SQL 数据类型 NUMERIC?

    Oracle JDBC 驱动程序将什么 Java 数据类型分配给 Oracle SQL 数据类型NUMERIC 这会随着尺寸的变化而变化吗NUMERIC type 正如其他人已经说过的 驱动程序将所有内容映射到 BigDecimal 即使它
  • macOS 上的 Clang 无法从 ncurses 链接 lmenu

    我是使用 ncurses 库的新手 所以我一直在尝试重新创建此页面上的一些示例 http www tldp org HOWTO NCURSES Programming HOWTO index html 我已经获得了有关创建菜单的部分 特别是
  • 我想找到填充或搜索,猫鼬

    我的模型代码 var user mongoose Schema email password name company position phoneNumber signDate Date friends type mongoose Sch
  • 如何读取 Python 请求的响应?

    我有两个 Python 脚本 一个使用的是urllib2库一个使用请求库 我发现 Requests 更容易实现 但我找不到 urlib2 的等效项read 功能 例如 response url urlopen req print respo
  • 为什么 Linux 内核中没有零拷贝网络? [关闭]

    Closed 这个问题是基于意见的 目前不接受答案 我想知道为什么linux内核 或任何其他主流操作系统 没有零拷贝网络功能的原因 我所说的零复制是指 数据包 数据流不会被复制以传递到用户空间中的应用程序 但例如使用内存池类型的分配器在内核
  • C++11 和 C++03 在对 std::string 小字符串优化的支持方面有所不同?

    在C 11标准的兼容性附录中 C 03到C 11的变化之一描述如下 C 2 11 第 21 条 字符串库 21 4 1 Change 放宽 basic string 失效规则 基本原理 允许小字符串优化 对原始特征的影响 可以执行有效的 C