char:8位1字节可以存储ASCII字符集和ISO-8859字符集,并可以采用多字符存储Shift-JIS和UTF-8编码的Unicode字符集
wchar_t:宽字符,文档中解释为,大到可以支持所有字符编码。在windows上占16位2字节采用UTF-16编码,在其他支持Unicode的系统上占32位4字节
在C++11引入char16_t和char32_t,在C++20中引入char8_t
char16_t:为UTF-16定义的字符表示类型 无符号16位 前缀u
char32_t:为UTF-32定义的字符表示类型 无符号32位 前缀U
在进行字符串编码时,如果确定了字符长度和符号特征将很有帮助,因此C++11增加了这两种类型
(在不同编译器中前缀可能不同,visual studio中前缀为L)
char8_t:为UTF-8定义的字符表示类型
(根据在网上搜索到的,老代码如果启用新的char8_t将会出现很多兼容性问题)
具体可以看https://github.com/tahonermann/char8_t-remediation