Como o STD :: StringStream manipula wchar_t* no operador <
-
27-09-2019 - |
Pergunta
Dado que o snippet seguinte não compila:
std::stringstream ss;
ss << std::wstring(L"abc");
Eu também não pensei que este faria:
std::stringstream ss;
ss << L"abc";
Mas isso faz (pelo menos no VC ++). Acho que isso é devido ao seguinte ostream::operator<<
sobrecarga:
ostream& operator<< (const void* val );
Isso tem o potencial de quebrar silenciosamente meu código, se eu inadvertidamente misturar tipos de personagens?
Solução
Isso tem o potencial de quebrar silenciosamente meu código, se eu inadvertidamente misturar tipos de personagens?
Em uma palavra: sim, e não há solução alternativa que eu conheço. Você verá apenas uma representação de um valor de ponteiro em vez de uma sequência de caracteres, para que não seja um acidente em potencial ou um comportamento indefinido, apenas a saída que não é o que você deseja.
Outras dicas
Sim - você precisa wstringstream
por wchar_t
resultado.
Você pode mitigar isso por não usar literais de string. Se você tentar passar const wstring&
para stringstream
Não vai compilar, como você observou.