我知道在C++98中,std::basic_string<>
和std::vector<>
都不需要使用连续的存储。当时人们认为这是一个失误,但针对std::vector<>
的问题很快就被指出并在C++03版本上修复了。
我记得曾经阅读过关于在C++11还称为C++0x时讨论要求std::basic_string<>
使用连续存储的文章,但由于我没有密切关注那时的讨论,并且在工作中我仍然受限于C++03,所以我不确定其结果。
那么,std::basic_string<>
是否需要使用连续存储?(如果需要,那么哪个版本的标准首先要求它?)
如果你想知道:如果你的代码将&str[0]
的结果传递给期望写入连续内存块的函数,这一点非常重要。(我知道str.data()
,但由于明显的原因,旧代码不使用它。)
str.data()
需要是常数时间并且需要返回一个连续的内存块,我会得出结论,是的。 - Šimon Tóthstr.data()
返回一个const char*
。 - sbistd::basic_string
实现;对此感兴趣的任何人都可能将其添加为独立的STLrope
类似物。因此,在实践中,如果我是你,我会先查看你的工作C++03的标准库(如果有偏执症),然后在假定它始终是连续的情况下编码。 - Tony Delroy