现代C++语言核心特性解析
上QQ阅读APP看书,第一时间看更新

1.2.5 库对新字符类型的支持

随着新字符类型加入C++11标准,相应的库函数也加入进来。C11在中增加了4个字符的转换函数,包括:

size_t mbrtoc16( char16_t* pc16, const char* s, size_t n, mbstate_t* ps );
size_t c16rtomb( char* s, char16_t c16, mbstate_t* ps );
size_t mbrtoc32( char32_t* pc32, const char* s, size_t n, mbstate_t* ps );
size_t c32rtomb( char* s, char32_t c32, mbstate_t* ps );

它们的功能分别是多字节字符和UTF-16编码字符互转,以及多字节字符和UTF-32编码字符互转。在C++11中,我们可以通过包含<cuchar>来使用这4个函数。当然C++11中也添加了C++风格的转发方法std::wstring_convert以及std::codecvt。使用类模板std::wstring_convertstd::codecvt相结合,可以对多字节字符串和宽字符串进行转换。不过这里并不打算花费篇幅介绍这些转换方法,因为它们在C++17标准中已经不被推荐使用了,所以应该尽量避免使用它们。

除此之外,C++标准库的字符串也加入了对新字符类型的支持,例如:

using u16string = basic_string;
using u32string = basic_string;
using wstring = basic_string;