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

C++11 Allocation Requirement on Strings

本文关键字:分配 字符串 C++11      更新时间:2023-10-16

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

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

2011 标准第 21.4.1.5 节规定:

应存储basic_string对象中的类似字符的对象 连续的。也就是说,对于任何basic_string对象s,恒等式 &*(s.begin() + n) == &*s.begin() + n应适用于 n这样0 <= n < s.size().

标识表达式的两个部分是

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

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