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

时间:2015-06-22 10:45:23

标签: c++ string c++11 memory standards

我听说C ++ 11需要在连续的内存中分配string。我甚至以为我看到了堆栈溢出问题,但我似乎无法找到它。

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

1 个答案:

答案 0 :(得分:4)

2011年标准第21.4.1.5节规定:

  

应存储basic_string对象中类似char的对象   连续。也就是说,对于任何basic_string对象s,标识   &*(s.begin() + n) == &*s.begin() + n应该适用于所有价值观   n0 <= n < s.size()

身份表达的两部分是

  1. begin()迭代器,前进n,然后取消引用并获取生成元素的地址。
  2. begin()迭代器,取消引用并获取结果元素的地址。将n添加到此指针。
  3. 由于两者都必须相同,因此强制执行连续存储;也就是说,迭代器不能在不违反此要求的情况下移动到任何非连续存储上。