¿Std::string siempre termina en nulo en C++ 11? [duplicar]
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 terminación nula y posiblemente prohibir implementaciones de copia en 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 es probable que se adopte una o ambas propuestas de este documento, pero lo veremos en una o dos próximas reuniones.
Sé que C++ 11 ahora garantiza que los std::string
contenidos se almacenen de forma contigua, pero ¿adoptaron lo anterior en el borrador final?
¿Será ahora seguro usar algo como &str[0]
?
Sí , según [string.accessors] p1 ,:std::basic_string::c_str()
Devuelve : Un puntero
p
tal quep + i == &operator[](i)
para cada unoi
en[0,size()]
.Complejidad : tiempo constante.
Requiere: El programa no alterará ninguno de los valores almacenados en la matriz de caracteres.
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]
).