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