In C++98
并且C++03
std::string
可能已将其底层数据存储在非连续内存中.这是什么原因?这个宽松的要求可以实现哪些可能的优化?有没有任何编译器/架构实际使用它?
如果你将字符串的一部分存储在不同的内存位置,那么迭代器不会过于复杂吗?这个类也是如此,因为它需要准确知道字符串的不同部分在哪里.
主要原因是字符串连接可以在没有重新分配的情况下进行.我相信早期版本的STLPort利用了它.
另一个原因是可以实现写时复制或甚至部分写时复制.虽然其他要求std::string
(特别是C++ 11的移动语义)现在意味着这已不再可能.