Зачем вам что-то менять?
string
и wstring
- это классы строк, соответствующие char
и wchar_t
, которые в контексте взаимодействия со средой предназначены для переноса данных, закодированных соответственно в "узкополосном представлении системы" "и фиксированной ширины в" кодировке системы ".
С другой стороны, u8
/ u
/ U
, а также char16_t
и char32_t
, а также соответствующие строковые классы предназначены для хранения последовательностей кодовых точек Unicode, закодированных в UTF-8/16 / 32.
Последний является отдельной проблемной областью от первого. Стандарт не содержит механизма для соединения двух доменов (и библиотека, такая как iconv()
, обычно требуется для того, чтобы сделать этот мост переносимым, например, путем транскодирования WCHAR_T / UTF-32).
Вот мой стандартный список связанных вопросов: # 1 , # 2 , # 3