Visual Studio 2012(VC11)是否实现了std :: string使用连续内存的C ++ 11保证?

问题描述 投票:0回答:2

来自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-studio-2012 c++11 stdstring
2个回答
3
投票

Visual C ++一直使用std::string的连续存储。

实现连续性要求的设计决策之一是所有当前的编译器都在这样做。微软在ISO C ++委员会中有很好的代表性;他们没有机会忽略它。 Visual C ++确实经历了一个实现写时复制“优化”的阶段,但从来不是使用非连续“绳索”的一个。


0
投票

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

如果没有使用连续的内存来实现字符串,我会很疯狂。特别是因为c_str()也是const。

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

© www.soinside.com 2019 - 2024. All rights reserved.