Как std :: stringstream обрабатывает wchar_t * в операторе <<? - PullRequest
5 голосов
/ 01 октября 2010

Учитывая, что следующий фрагмент не компилируется:

std::stringstream ss;
ss << std::wstring(L"abc");

Я не думал, что это будет либо:

std::stringstream ss;
ss << L"abc";

Но это происходит (по крайней мере на VC ++).Я предполагаю, что это из-за следующей ostream::operator<< перегрузки:

ostream& operator<< (const void* val );

Может ли это молча нарушить мой код, если я случайно смешаю типы символов?

Ответы [ 2 ]

10 голосов
/ 01 октября 2010

Да - вам нужно wstringstream для wchar_t вывода.

Вы можете уменьшить это, не используя строковые литералы.Если вы попытаетесь передать const wstring& в stringstream, он не скомпилируется, как вы заметили.

3 голосов
/ 01 октября 2010

Может ли это молча нарушить мой код, если я случайно смешаю типы символов?

Одним словом: да, и я не знаю обходного пути.Вы просто увидите представление значения указателя вместо строки символов, так что это не потенциальный сбой или неопределенное поведение, просто вывод не того, что вы хотите.

...