¿Std::string siempre termina en nulo en C++ 11? [duplicar]

Resuelto links77 asked hace 13 años • 3 respuestas

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::stringcontenidos se almacenen de forma contigua, pero ¿adoptaron lo anterior en el borrador final?

¿Será ahora seguro usar algo como &str[0]?

links77 avatar May 21 '11 03:05 links77
Aceptado

Sí , según [string.accessors] p1 ,:std::basic_string::c_str()

Devuelve : Un puntero ptal que p + i == &operator[](i)para cada uno ien [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]).

James McNellis avatar May 20 '2011 20:05 James McNellis