Во-первых, std :: wstring является экземпляром std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >
.
Хотя большая часть реальной работы выполняется char_traits, и можно написать свою собственную, это делается главным образом для обеспечения возможности использования Cбиблиотека времени выполнения с различными размерами символов.
Способ синтаксического анализа в указателе элемента * - до тех пор, пока не будет достигнут символ, обозначенный символом char_traits в качестве терминатора.
Однако вы можете создать указательи длина, в этом случае он будет читать количество символов, которые он говорит вам, который будет включать любые нулевые байты.Вы можете встраивать нулевые байты в basic_string, и если вы вызываете length () или size (), которые являются псевдонимами для одной и той же вещи, он сообщит вам, сколько символов в нем содержится.
Нет магиив char_traits для декодирования многоэлементных символов как одного, и вам не следует пытаться реализовать это таким образом.