C++11 对字符串的分配要求

C++11 Allocation Requirement on Strings

我听说 C++11 将要求在连续内存中分配 strings。我什至以为我在上面看到了堆栈溢出问题,但我似乎找不到它。

我知道在实践中 gcc 和 Visual Studio 确实连续分配 strings,我只是问标准的要求。

2011 年标准第 21.4.1.5 节规定:

The char-like objects in a basic_string object shall be stored contiguously. That is, for any basic_string object s, the identity &*(s.begin() + n) == &*s.begin() + n shall hold for all values of n such that 0 <= n < s.size().

身份表达式的两部分是

  1. 获取 begin() 迭代器,前进 n,然后取消引用并获取结果元素的地址。
  2. 获取 begin() 迭代器,取消引用并获取结果元素的地址。将 n 添加到此指针。

由于两者必须相同,因此这会强制执行连续存储;也就是说,迭代器不能在不违反此要求的情况下移动任何非连续存储。