我听说C ++ 11需要在连续的内存中分配string
。我甚至以为我看到了堆栈溢出问题,但我似乎无法找到它。
我知道在实践中,gcc和Visual Studio都会连续分配string
,我只是询问标准的要求。
答案 0 :(得分:4)
2011年标准第21.4.1.5节规定:
应存储
basic_string
对象中类似char的对象 连续。也就是说,对于任何basic_string
对象s
,标识&*(s.begin() + n) == &*s.begin() + n
应该适用于所有价值观n
,0 <= n < s.size()
。
身份表达的两部分是
begin()
迭代器,前进n
,然后取消引用并获取生成元素的地址。begin()
迭代器,取消引用并获取结果元素的地址。将n
添加到此指针。由于两者都必须相同,因此强制执行连续存储;也就是说,迭代器不能在不违反此要求的情况下移动到任何非连续存储上。