std::string — char. std::wstring — wchar_t. std::u8string — char8_t (UTF-8).
1#include <string>23// std::string — narrow characters (usually UTF-8)4std::string s = "Hello";5std::string utf8 = "Привет"; // UTF-8 bytes67// std::wstring — wide characters8std::wstring ws = L"Hello";9std::wstring wu = L"Привет";1011// std::u8string — UTF-8 (C++20)12std::u8string u8s = u8"Привет";1314// std::u16string — UTF-1615std::u16string u16s = u"Привет";1617// std::u32string — UTF-3218std::u32string u32s = U"Привет";1920// Size comparison21std::cout << s.size(); // Bytes in UTF-822std::cout << ws.size(); // Number of wchar_t23std::cout << u32s.size(); // Number of code points2425// Conversion26std::string from_wide(ws.begin(), ws.end());27std::wstring to_wide(s.begin(), s.end());2829// Format (C++20)30std::cout << std::format("{}", s); // Works with all31std::wcout << std::format(L"{}", ws);
Recommendations: