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?

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top