c++ gcc c++11 stdstring

¿Se vuelve a contar std:: string en GCC 4.x/C++ 11?



c++11 stdstring (3)

¿Es std::string referencia-contado cuando se usa gcc 4 con -std=c++0x o -std=c++11 ?


C ++ 11 agregó un lenguaje específico que prohíbe que std::string se cuente como referencia. Entonces, si es así, entonces es una falla bastante significativa en la biblioteca estándar C ++ 11 de GCC.


En cuanto a la documentación de libstdc ++ encuentro (ver el enlace para más información):

Una cadena se ve así:

[_Rep] _M_length [basic_string<char>] _M_capacity _M_dataplus _M_refcount _M_p ----------------> unnamed array of char_type

Entonces, sí, es refonado. Además, de la discusión here :

Sí, std :: string se convertirá en conteo no de referencia en algún punto, pero como una cadena no contada por referencia también es válida en C ++ 98, una opción sería cambiar a una cadena no contada para los modos -std = c ++ 98 y -std = c ++ 11. No digo que eso sea lo que sucederá, pero podría ser.

Entonces, parece que hay planes para cambiarlo para que se conforme (no sé cómo avanza el progreso).

Actualización Como señala emsr en los comentarios, actualmente existe una extensión contada que no es de referencia llamada vstring.h , y parece que la única razón por la que no reemplazó a std::string es debido a la compatibilidad ABI. Hay una pregunta ASÍ sobre esto here .


Agregando información útil que publica esta pregunta en fechas posteriores.

std::string ya no se contará como referencia con el lanzamiento de GCC 5, para cumplir con este requisito de C ++ 11.

Desde https://gcc.gnu.org/gcc-5/changes.html

De manera predeterminada, se habilita una nueva implementación de std :: string, utilizando la optimización de cadenas pequeñas en lugar del recuento de referencias de copia por escritura.