¿Cómo std :: stringstream maneja wchar_t* en el operador <
-
27-09-2019 - |
Pregunta
Dado que el siguiente fragmento no compila:
std::stringstream ss;
ss << std::wstring(L"abc");
Tampoco pensé que este lo haría:
std::stringstream ss;
ss << L"abc";
Pero lo hace (al menos en VC ++). Supongo que esto se debe a lo siguiente ostream::operator<<
sobrecarga:
ostream& operator<< (const void* val );
¿Tiene esto el potencial de romper en silencio mi código, si inadvertidamente mezclo los tipos de caracteres?
Solución
¿Tiene esto el potencial de romper en silencio mi código, si inadvertidamente mezclo los tipos de caracteres?
En una palabra: sí, y no hay solución que conozca. Simplemente verá una representación de un valor de puntero en lugar de una cadena de caracteres, por lo que no es un bloqueo potencial o un comportamiento indefinido, solo la salida no es lo que desea.
Otros consejos
Si, necesitas wstringstream
por wchar_t
producción.
Puede mitigar esto al no usar literales de cadena. Si intentas pasar const wstring&
a stringstream
No se compilará, como señalaste.