官术网_书友最值得收藏!

1.3 char8_t字符類型

使用char類型來處理UTF-8字符雖然可行,但是也會帶來一些困擾,比如當庫函數需要同時處理多種字符時必須采用不同的函數名稱以區分普通字符和UTF-8字符。C++20標準新引入的類型char8_t可以解決以上問題,它可以代替char作為UTF-8的字符類型。char8_t具有和unsigned char相同的符號屬性、存儲大小、對齊方式以及整數轉換等級。引入char8_t類型后,在C++17環境下可以編譯的UTF-8字符相關的代碼會出現問題,例如:

char str[] = u8"text"; // C++17編譯成功;C++20編譯失敗,需要char8_t
char c = u8'c';

當然反過來也不行:

char8_t c8a[] = "text"; // C++20編譯失敗,需要char
char8_t c8 = 'c';

另外,為了匹配新的char8_t字符類型,庫函數也有相應的增加:

size_t mbrtoc8(char8_t* pc8, const char* s, size_t n, mbstate_t* ps);
size_t c8rtomb(char* s, char8_t c8, mbstate_t* ps);

using u8string = basic_string;

最后需要說明的是,上面這些例子只是C++標準庫為新字符類型新增代碼的冰山一角,有興趣的讀者可以翻閱標準庫代碼,包括<atomic><filesystem><istream><limits><locale><ostream><string>以及<string_ view>等頭文件,這里就不一一介紹了。

主站蜘蛛池模板: 开封市| 西畴县| 花莲县| 上思县| 宜丰县| 霍州市| 玉溪市| 崇文区| 东宁县| 吉隆县| 洛川县| 上饶县| 南投县| 榆林市| 镇康县| 林周县| 孝昌县| 仙游县| 城市| 仙桃市| 丰镇市| 克什克腾旗| 织金县| 育儿| 凤城市| 昭苏县| 利津县| 简阳市| 绩溪县| 天全县| 应用必备| 芜湖市| 宣城市| 黎城县| 西吉县| 慈利县| 清水县| 龙海市| 双鸭山市| 荔波县| 黑山县|