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
ptal quep + i == &operator[](i)para cadaien[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] ?