C++11 对字符串的分配要求
C++11 Allocation Requirement on Strings
我听说 C++11 将要求在连续内存中分配 string
s。我什至以为我在上面看到了堆栈溢出问题,但我似乎找不到它。
我知道在实践中 gcc 和 Visual Studio 确实连续分配 string
s,我只是问标准的要求。
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()
.
身份表达式的两部分是
- 获取
begin()
迭代器,前进 n
,然后取消引用并获取结果元素的地址。
- 获取
begin()
迭代器,取消引用并获取结果元素的地址。将 n
添加到此指针。
由于两者必须相同,因此这会强制执行连续存储;也就是说,迭代器不能在不违反此要求的情况下移动任何非连续存储。
我听说 C++11 将要求在连续内存中分配 string
s。我什至以为我在上面看到了堆栈溢出问题,但我似乎找不到它。
我知道在实践中 gcc 和 Visual Studio 确实连续分配 string
s,我只是问标准的要求。
2011 年标准第 21.4.1.5 节规定:
The char-like objects in a
basic_string
object shall be stored contiguously. That is, for anybasic_string
objects
, the identity&*(s.begin() + n) == &*s.begin() + n
shall hold for all values ofn
such that0 <= n < s.size()
.
身份表达式的两部分是
- 获取
begin()
迭代器,前进n
,然后取消引用并获取结果元素的地址。 - 获取
begin()
迭代器,取消引用并获取结果元素的地址。将n
添加到此指针。
由于两者必须相同,因此这会强制执行连续存储;也就是说,迭代器不能在不违反此要求的情况下移动任何非连续存储。