在编译器开始实现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无关,它也适用于旧的标准。