来自C ++ 11之前的I've seen a few questions asking this开始由编译器实现。 VS2012 currently implements some C++11 functionality,但有很多未实现的C ++ 11功能。我不知道字符串现在是否保证是连续的,我想知道它们是否存在。
连续性的C ++ 11保证是this working draft of the standard的第21.4.1.5项。
如果可能的话,我想要一个正式的引用答案。
Visual C ++一直使用std::string
的连续存储。
实现连续性要求的设计决策之一是所有当前的编译器都在这样做。微软在ISO C ++委员会中有很好的代表性;他们没有机会忽略它。 Visual C ++确实经历了一个实现写时复制“优化”的阶段,但从来不是使用非连续“绳索”的一个。
我不清楚标准说的是什么,但是std::string
有一个非常有趣的方法c_str()
,它将const char*
返回到以null结尾的字符串。
如果没有使用连续的内存来实现字符串,我会很疯狂。特别是因为c_str()
也是const。
所以,应用奥卡姆剃刀,我们可以说它应该是安全的。它与C ++ 11无关,它也适用于旧标准。