std::string — 小字符串优化和交换

Posted

技术标签:

【中文标题】std::string — 小字符串优化和交换【英文标题】:std::string — small string optimization and swap 【发布时间】:2011-06-17 19:21:50 【问题描述】:

来自 N3290,[container.requirements.general]:

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

这如何与小字符串优化交互?他们是不是也忘了加std::string

【问题讨论】:

我不认为字符串是这里使用的意义上的“容器”。 @Logan:那么问题就变成了:“字符串是容器吗?”,如果你能提供正确的引用,它就是答案。 @ybungalobill :basic_string 没有在 FDIS 的 Containers Library 章节中描述的事实是一个很好的线索。 ;-] 如果他们把概念留在里面,我们肯定知道... @ildjarn:看来你是对的。这让我的问题毫无意义...... 【参考方案1】:

(转自评论)

std::string 不是一个容器——basic_string 在 FDIS 的Containers library 章节(第 23 节)中没有描述这一事实是一个很好的线索。 ;-]

【讨论】:

耶!现在我知道vector<char>string 之间的另一个区别! 21.4 曾经声称 basic_string 是一个容器,但显然已为 FDIS 删除。 @Bo:是的,看来你也是对的。但在旧标准 C++98 中是 21.3:“basic_string 符合 Reversible Container 的要求”。

以上是关于std::string — 小字符串优化和交换的主要内容,如果未能解决你的问题,请参考以下文章

优化字符串的使用:案例研究

编译器通常对字符串有特殊的优化吗?

C++ std::string 和字符串

std::string 和字符串文字之间的不一致

将 std::string 存储为字符数组

当键被分配字符串时,是不是有优化的 Map 版本?