问题
I had heard that C++11 was going to require string
s to be allocated in contiguous memory. I even thought I saw a stack overflow question on it, but I can't seem to find it.
I know that in practice both gcc and Visual Studio do allocate string
s contiguously, I'm just asking as to the standard's requirements.
回答1:
Section 21.4.1.5 of the 2011 standard states:
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()
.
The two parts of the identity expression are
- Take the
begin()
iterator, advance byn
, then dereference and take the address of the resulting element. - Take the
begin()
iterator, dereference and take the address of the resulting element. Addn
to this pointer.
Since both are required to be identical, this enforces contiguous storage; that is, the iterator cannot move over any non-contiguous storage without violating this requirement.
来源:https://stackoverflow.com/questions/30977974/c11-allocation-requirement-on-strings