- 現代C++語言核心特性解析
- 謝丙堃
- 349字
- 2021-09-27 17:49:49
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>
等頭文件,這里就不一一介紹了。
推薦閱讀
- What's New in TensorFlow 2.0
- Java高并發核心編程(卷2):多線程、鎖、JMM、JUC、高并發設計模式
- Hands-On Data Structures and Algorithms with JavaScript
- Django開發從入門到實踐
- Java程序設計與實踐教程(第2版)
- Hands-On Microservices with Kotlin
- Active Directory with PowerShell
- Mastering Xamarin.Forms(Second Edition)
- Ext JS 4 Plugin and Extension Development
- Java高級程序設計
- Drupal Search Engine Optimization
- After Effects CC案例設計與經典插件(視頻教學版)
- 小學生C++趣味編程從入門到精通
- Getting Started with RethinkDB
- 虛擬現實:引領未來的人機交互革命