Я хотел бы исправить @ jamesdlin's anwser , хотя его ответ правильный.
До C ++ 11 есть char
и wchar_t
, и, следовательно, специализироватьсяstd::basic_string<>
до std::string
и std::wstring
.
Однако ширина в битах wchar_t
зависит от платформы: в Windows она 16-разрядная, в то время как на других платформах она 32-разрядная.
А с появлением C ++ 11 стандарт добавляет char16_t
для представления 16-битных широких символов;таким образом, в Windows std::u16string
оказывается взаимозаменяемым с std::wstring
в большинстве контекстов, потому что они оба способны представлять 16-битные широкие символы.
Тип wchar_t является широким, определяемым реализациейтип персонажа.В компиляторе Microsoft он представляет 16-битный широкий символ, используемый для хранения Unicode, закодированного как UTF-16LE, нативный тип символов в операционных системах Windows.
Но новейший MSDN, кажется, добавляет немного в сторону примечаний для кода, использующего std::wstring
, но намеревающегося быть переносимым:
Размер wchar_t определяется реализацией.Если ваш код зависит от wchar_t определенного размера, проверьте реализацию вашей платформы (например, с помощью sizeof (wchar_t)).Если вам нужен строковый символьный тип с шириной, которая гарантированно останется неизменной на всех платформах, используйте string, u16string или u32string.
Что касается LE (little-endian), он должен бытьдля конкретной архитектуры, IIRC.и большинство архитектур сегодня используют LE.