- 現代C++語言核心特性解析
- 謝丙堃
- 422字
- 2021-09-27 17:49:48
1.2.2 使用新字符類型char16_t和char32_t
對于UTF-8編碼方法而言,普通類型似乎是無法滿足需求的,畢竟普通類型無法表達變長的內存空間。所以一般情況下我們直接使用基本類型char
進行處理,而過去也沒有一個針對UTF-16和UTF-32的字符類型。到了C++11,char16_t
和char32_t
的出現打破了這個尷尬的局面。除此之外,C++11標準還為3種編碼提供了新前綴用于聲明3種編碼字符和字符串的字面量,它們分別是UTF-8的前綴u8
、UTF-16的前綴u
和UTF-32的前綴U
:
char utf8c = u8'a'; // C++17標準
//char utf8c = u8'好';
char16_t utf16c = u'好';
char32_t utf32c = U'好';
char utf8[] = u8"你好世界";
char16_t utf16[] = u"你好世界";
char32_t utf32[] = U"你好世界";
在上面的代碼中,分別使用UTF-8、UTF-16和UTF-32編碼的字符和字符串對變量進行了初始化,代碼很簡單,不過還是有兩個地方值得一提。
char utf8c = u8'a'
在C++11標準中實際上是無法編譯成功的,因為在C++11標準中u8
只能作為字符串字面量的前綴,而無法作為字符的前綴。這個問題直到C++17標準才得以解決,所以上述代碼需要C++17的環境來執行編譯。
char utf8c = u8'好'
是無法通過編譯的,因為存儲“好”需要3字節,顯然utf8c只能存儲1字節,所以會編譯失敗。
推薦閱讀
- OpenStack Cloud Computing Cookbook(Third Edition)
- ASP.NET Web API:Build RESTful web applications and services on the .NET framework
- OpenCV實例精解
- Android 9 Development Cookbook(Third Edition)
- Learning ASP.NET Core 2.0
- OpenCV 3和Qt5計算機視覺應用開發
- Mastering Linux Network Administration
- 精通MySQL 8(視頻教學版)
- Java程序設計教程
- Mastering Node.js
- jQuery基礎教程(第4版)
- Server Side development with Node.js and Koa.js Quick Start Guide
- Computer Vision with Python 3
- Mastering Responsive Web Design
- Apache Cassandra Essentials