Yes, the code is legal in C++11 because the storage for std::string
is guaranteed to be contiguous and your code avoids overwriting the terminating NULL character (or value initialized CharT
).
From N3337, §21.4.5 [string.access]
const_reference operator[](size_type pos) const;
reference operator[](size_type pos);
1 Requires: pos <= size()
.
2 Returns: *(begin() + pos)
if pos < size()
. Otherwise, returns a reference to an object of type charT
with value charT()
, where modifying the object leads to undefined behavior.
Your example satisfies the requirements stated above, so the behavior is well defined.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…