1-2 新字符类型char16_t和char32_t

1.2 新字符类型char16_t和char32_t

1.2.2 使用新类型char16_t和char32_t

  • utf-8的字面量需要加前缀u8

  • char16_t的字面量需要加前缀u

  • char32_t的字面量需要加前缀U

  • C++17标准允许utf-8类型字符保存在char中,仅限一个字节大小的字符(例如ascii码中的字符,但是汉字不行)。

char utf8c = u8'a';		//c++17
//char utf8c = u8'好'; //报错!

char16_t utf16c = u'好'; //utf-16
char32_t utf32c = U'好'; //utf-32

​ 使用字符串时,如下:

char utf8[] u8"你好世界";
char16_t utf16[] = u"你好世界";
char32_t utf32[] = U"你好世界";

1.2.3 wchar_t存在的问题

​ C++98规定了wchar_t代表宽字符,但是并未规定其所占的内存大小,因此代码在Windows中是16位长度,在Linux和MacOS中是32位长度,不能保持相同的行为。

​ 从C++11开始,使用utf-8或者utf-16等新标准。