Is writing to &str[0] buffer (of a std:string) well-defined behaviour in C++11?
20,218
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)
ifpos < size()
. Otherwise, returns a reference to an object of typecharT
with valuecharT()
, where modifying the object leads to undefined behavior.
Your example satisfies the requirements stated above, so the behavior is well defined.
Comments
-
cubuspl42 over 3 years
char hello[] = "hello world"; std::string str; str.resize(sizeof(hello)-1); memcpy(&str[0], hello, sizeof(hello)-1);
This code is undefined behaviour in C++98. Is it legal in C++11?