c++ string c++11 language-lawyer null-terminated

Will std:: string siempre terminará nulo en C++ 11?



c++11 language-lawyer (1)

Sí. Según C ++ 0x FDIS 21.4.7.1/1, std::basic_string::c_str() debe devolver

un puntero p tal que p + i == &operator[](i) para cada i en [0,size()] .

Esto significa que dada una cadena s , el puntero devuelto por s.c_str() debe ser el mismo que la dirección del carácter inicial en la cadena ( &s[0] ).

En una publicación de 2008 en su sitio, Herb Sutter afirma lo siguiente:

Existe una propuesta activa para reforzar esto aún más en C ++ 0x y requerir la terminación nula y posiblemente prohibir las implementaciones de copia sobre escritura, por razones relacionadas con la concurrencia. Aquí está el documento: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2534.html . Creo que una o ambas de las propuestas en este documento es probable que se adopten, pero veremos en la próxima reunión o dos.

Sé que C ++ 11 ahora garantiza que los contenidos de std :: string se almacenen contiguamente, pero ¿adoptaron lo anterior en el borrador final?

¿Ahora será seguro usar algo como &str[0] ?