【发布时间】:2016-01-12 11:47:31
【问题描述】:
我知道在 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()需要是常数时间并且需要返回一个连续的内存块,我会得出结论是的。 -
查看类似的问题 stackoverflow.com/questions/1986966/… 和 stackoverflow.com/questions/2256160/…,它们回答了这个问题,但阅读起来并不简单。
-
@Mr.kbok:我看过他们两个,阅读了答案,并认为我宁愿有一个最新的明确答案。
-
@Angew:在 C++03 中,
str.data()返回了一个const char*。 -
FWIW,我从未见过或听说过不连续的
std::basic_string实现;对此感兴趣的任何人都可能会将其添加为独特的STLrope相似。所以,在实践中,如果我是你,我只会偷看你的工作 C++03 的标准库(如果偏执的话),然后在假设它总是连续的情况下进行编码。
标签: c++ c++11 c++14 language-lawyer c++17