std::wstring vs std::string: ¿cuándo usar Unicode y cuándo ASCII en C++?
```html
¡Hola a todos! Soy un desarrollador principiante de C++ y me confunde constantemente la diferencia entre std::wstring y std::string. He leído que std::string es para cadenas "normales" y std::wstring para Unicode. Pero en la práctica tengo muchos problemas.
Aquí hay un ejemplo: escribo un programa que lee nombres de archivos de una carpeta. Algunos archivos contienen cirílico, por ejemplo "отчет.docx". Uso std::string:
```cpp
std::string filename = "отчет.docx";
std::ifstream file(filename);
```
¡Y el archivo no se abre! Si uso std::wstring y wifstream, todo funciona:
```cpp
std::wstring filename = L"отчет.docx";
std::wifstream file(filename);
```
Pero entonces surgen nuevos problemas: no puedo pasar wstring a funciones que esperan std::string (por ejemplo, en bibliotecas antiguas), y al imprimir en consola con std::cout obtengo caracteres extraños. Tengo que usar std::wcout, pero también se comporta de manera extraña.
Otra pregunta: si escribo una aplicación multiplataforma (Windows + Linux), en Linux st
```