C++11 Allocation Requirement on Strings

后端 未结 1 1931
野的像风
野的像风 2021-01-21 23:18

I had heard that C++11 was going to require strings to be allocated in contiguous memory. I even thought I saw a stack overflow question on it, but I can\'t seem to

相关标签:
1条回答
  • 2021-01-21 23:55

    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 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().

    The two parts of the identity expression are

    1. Take the begin() iterator, advance by n, then dereference and take the address of the resulting element.
    2. Take the begin() iterator, dereference and take the address of the resulting element. Add n 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.

    0 讨论(0)
提交回复
热议问题