std :: string o std :: wstring, según sus necesidades. ¿Por qué?
- Son estándar
- Son portátiles
- Pueden manejar I18N
- Tienen garantías de rendimiento (según la norma)
- Protegido contra desbordamientos de búfer y ataques similares
- Se pueden convertir fácilmente a otros tipos según sea necesario
- Están muy bien modelados, ofreciéndole una amplia variedad de opciones a la vez que reducen la saturación del código y mejoran actuación. De Verdad. Los compiladores que no pueden manejar plantillas ya no existen.
Una matriz de caracteres tipo C solo está pidiendo problemas. Todavía tendrá que lidiar con ellos de vez en cuando (y eso es para lo que std :: string.c_str() es), pero, sinceramente, uno de los mayores peligros en C es que los programadores hagan cosas malas con char * y terminen con desbordamientos de búfer. Simplemente no lo hagas.
Una matriz de wchar__t es lo mismo, simplemente más grande.
CString, BSTR y CComBSTR no son estándar y no son portátiles. Evítelos a menos que sea absolutamente forzado. De manera óptima, solo conviértelos std :: string/std :: wstring cuando sea necesario, lo que no debería ser muy costoso.
Tenga en cuenta que std :: string es solo un elemento secundario de std :: basic_string, pero aún así es mejor utilizar std :: string a menos que tenga una buena razón para no hacerlo. Realmente bueno. Deje que el compilador se ocupe de la optimización en esta situación.
Lea las preguntas frecuentes http://stackoverflow.com/faq Ra. Este es un gran ejemplo de una pregunta abierta que requiere mucha discusión. Downvoted. –
No estoy de acuerdo con Onorio: es una gran pregunta para alguien que no sabe qué sistema de cadenas usar entre todas las opciones. Upvoted para cancelar el voto a favor de Onorio :) –
Debe especificar si está buscando una solución multiplataforma o solo una específica de Windows. Esto es muy importante. – sorin