2012-05-05 15 views
22

Leí algunos informes de errores de GCC y la gente hablaba de "vstring". Buscando en la WEB me di cuenta http://gcc.gnu.org/onlinedocs/libstdc++/libstdc++-html-USERS-4.2/vstring_8h.html.¿Qué es "vstring" de GCC?

¿Puede alguien dar más detalles sobre para qué sirve y para qué sirve? ¿Por qué usarlo en lugar de std :: string?

+1

El enlace que proporcionó menciona directamente en la parte superior * "Este archivo es una extensión de GNU a la Biblioteca estándar de C++." * Por supuesto, eso no responde completamente a su pregunta. –

+0

Si la memoria sirve, es/fue una reimplementación experimental de 'std :: string' con la misma interfaz pero diferentes agallas. El archivo tiene fechas de copyright en 2005-2007 y nada desde entonces; recomendamos buscar en el archivo de la lista de correo ['libstdC++'] (http://gcc.gnu.org/ml/libstdc++/) en ese período de tiempo para las menciones. – zwol

Respuesta

23

La clase vstring de GCC es una versátil clase de cadena, que se introdujo en la implementación libstdc++ de GCC 4.1.

Es compatible con std::basic_string, con estos detalles adicionales: se proporcionan

  • Dos clases de base:
    • el predeterminado evita el recuento de referencias y está optimizado para cadenas cortas;
    • la alternativa, todavía la usa (el recuento de referencias), mientras mejora en algunas áreas de bajo nivel (por ejemplo, alineación). Ver vstring_fwd.h para algunos typedefs útiles.
  • Se han reescrito varios algoritmos (por ejemplo, reemplazar), se ha simplificado el código y se han agregado optimizaciones simples.
  • La opción 3 de DR 431 se implementa para ambas bases disponibles, mejorando así el soporte para asignadores con estado.

DR431 es Library Working Group Defect Report 431, con la opción 3 el aspecto de la implementación de un mejor soporte para la clase asignador para permitir un mejor intercambio y otras operaciones relacionadas con el asignador.

Los detalles básicos son de GCC 4.1's release notes, en la sección Biblioteca de tiempo de ejecución.

edición:

Parece que el propósito original de esta extensión era proporcionar una base para una implementación en C++ 11 std::string. Paolo Carlini, colaborador de GCC/libstdC++, comenta en este GCC Bug Report que <ext/vstring.h> contiene una versión experimental no contada del próximo std::string. Comentarios de fecha 12 de abril de 2012:

Lo que tratamos de explicar es que este tipo de problema es bien conocido y, más o menos , afecta cualquier aplicación contado referencia ... Ese no es el caso cuando el recuento de referencias no se utiliza y de hecho se no ser utilizado (por el nuevo estándar de C++ 11) en una nueva implementación de std::string cuales estamos mostrando actualmente como <ext/vstring.h> ...

+0

¿Cuál es la razón para inventarlo? ¿Se convertirá finalmente en la implementación de std :: string? –

+1

@ JohannesSchaub-litb - Creo que ese fue el propósito original de 'ext/vstring.h', que proporcionaría una implementación de cadena contada no de referencia que eventualmente se convertiría en la predeterminada (o ser la base) de una nueva 'estándar :: implementación de string' para la implementación C++ 11 de GCC. Hay varios comentarios en las listas de correo de GCC e informes de errores que parecen apuntar hacia eso, como este comentario: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52938#c5 y esto: http: // old.nabble.com/Re%3A--RFC--C%2B%2B1x-breaking-the-ABI-in-one-more-place-%3A%28-p28618810.html. Eso es todo lo que sé sin preguntar. – birryree

+2

http://gcc.gnu.org/ml/libstdc++/2012-01/msg00064.html implica que la única razón por la que aún no se ha convertido en la implementación 'std :: string' es por las restricciones de compatibilidad ABI. – zwol

Cuestiones relacionadas