Visual Studio 2012 (VC11)实现c++ 11保证std::string使用连续内存吗?



在编译器开始实现c++ 11之前,我已经看到一些问题在问这个问题。VS2012目前实现了一些c++ 11的功能,但是有很多未实现的c++ 11特性。我找不到字符串现在是否保证连续的提及,我想知道它们是否。

c++ 11对连续性的保证是本标准工作草案的21.4.1.5项。

如果可能的话,我想要一个带有答案的官方引用。

Visual c++一直为std::string使用连续存储。

实现连续性要求的设计决策之一是,当前所有的编译器无论如何都在这样做。微软在ISO c++委员会中有很好的代表;他们不可能忽视这一点。Visual c++确实经历了一个实现写时复制"优化"的阶段,但从来没有使用过非连续的"rope"。

我不知道详细的标准是怎么说的,但是std::string有一个非常有趣的方法c_str(),它返回一个const char*到以null结尾的字符串。

如果不使用连续内存实现字符串,那我就疯了。特别是因为c_str()也是const。

因此,应用奥卡姆剃刀,我们可以说它应该是安全的。它与c++ 11无关,它也适用于旧的标准。

相关内容

  • 没有找到相关文章

最新更新