¿Cuál es la diferencia entre std::string
y std::basic_string
? ¿Y por qué se necesitan ambos?¿Cuál es la diferencia entre std :: string y std :: basic_string? ¿Y por qué se necesitan ambos?
Respuesta
std::basic_string
es una plantilla de clase para la fabricación de cuerdas de tipos de caracteres, std::string
es una typedef
para una especialización de la plantilla de clase para char
. Sí, ambos son necesarios (o al menos requeridos por el estándar).
std::string
es una instanciación de std::basic_string<T>
:
typedef std::basic_string<char> string
std::basic_string
es necesario tener una interfaz similar para todo tipo de cuerdas (wstring
por ejemplo).
El término correcto es "especialización". 'string' es una * especialización * de' basic_string'. – AnT
Supongo que podrías discutir sobre eso. La "especialización" se usa generalmente para indicar herencia. Una instanciada {clase | función} se instancia al sustituir los argumentos de la plantilla. Hay una especialización de plantilla parcial, pero esto no se usa aquí. – pmr
Referirse a una clase derivada como una 'especialización' es un uso menos formal de 'especialización'. La palabra 'especialización' no se usa así en absoluto en el estándar (estoy bastante seguro), pero se usa ampliamente para describir la especialización de plantillas. El nombre de una especialización de plantilla se puede usar en contextos que no fuerzan ni la creación de instancias implícitas, por lo que la especialización y la creación de instancias son conceptos separados. Además de una especialización de plantilla (el nombre de una plantilla con un conjunto particular de parámetros), también hay especializaciones parciales (solo plantillas de clase) y especializaciones explícitas. –
A std::string
es una instanciación de la plantilla std::basic_string
con un tipo de char
. Necesita ambos para poder crear cadenas de cosas además de char
, como std::basic_string<wchar_t>
para una cadena de caracteres anchos. O si desea una cadena con elementos de 32 bits, std::basic_string<unsigned int>
.
- 1. ¿Cuál es la diferencia entre std :: condition_variable y std :: condition_variable_any?
- 2. ¿Cuál es la diferencia entre std :: string :: c_str y std :: string :: data?
- 3. ¿Cuál es la diferencia entre std :: set y std :: vector?
- 4. ¿Cuál es la diferencia entre std :: merge y std :: set_union?
- 5. ¿Cuál es la diferencia entre std :: valarray y std :: array
- 6. ¿Cuál es la diferencia entre std :: quick_exit y std :: abort y por qué se necesitó std :: quick_exit?
- 7. ¿Cuál es la diferencia práctica entre std :: nth_element y std :: sort?
- 8. Cómo convertir CString y :: std :: string :: std :: wstring entre sí?
- 9. ¿Por qué no es std :: string :: max_size() == std :: string :: allocator :: max_size()
- 10. Cython C++ y std :: string
- 11. std :: string :: longitud() vs. std :: string :: size()
- 12. ¿Cuál es la diferencia entre string y StringBuilder?
- 13. ¿Cuál es la diferencia entre Double.parseDouble (String) y Double.valueOf (String)?
- 14. Diferencia entre std :: result_of y decltype
- 15. SWIG: Cómo ajustar std :: string & (std :: string pasado por referencia)
- 16. std :: vector <std::string> crash
- 17. std :: move entre std :: string y std :: vector <unsigned char>
- 18. Rendimiento std :: strstr vs std :: string :: encontrar
- 19. Ctd's std :: string pools, depug compilaciones? std :: string y valgrind problemas
- 20. Diferencia entre @string y @ + string?
- 21. Diferencia: std :: runtime_error vs std :: exception()
- 22. ¿Por qué es necesario llamar explícitamente a Myclass :: operator string() con std :: string :: operator +()?
- 23. ¿Hereda y reemplaza funciones de std :: string?
- 24. ¿Cuál es la diferencia entre notify_all() y notify_one() de std :: condition_variable?
- 25. ¿std :: string es parte del STL?
- 26. ¿Cuán grande es la brecha de rendimiento entre std :: sort y std :: stable_sort en la práctica?
- 27. ¿Cuál es la diferencia entre CharSequence [] y un String []?
- 28. Unicode y std :: string en C++
- 29. ¿Cuál es la diferencia entre ssize_t y ptrdiff_t?
- 30. C++ std :: string y NULL const char *
¿por qué ambos son necesarios? –
, entonces usted dice que std :: string es typedef std :: basic_string std :: string? –
@MuhammadAnnaqeeb 2.5 años tarde, pero la respuesta breve es proporcionar soporte ancho de cadena (wstring) (Unicode, 2 bytes por caracter, wchar_t) también. – Andrew