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

1.2.2 使用新字符類型char16_t和char32_t

對于UTF-8編碼方法而言,普通類型似乎是無法滿足需求的,畢竟普通類型無法表達變長的內存空間。所以一般情況下我們直接使用基本類型char進行處理,而過去也沒有一個針對UTF-16和UTF-32的字符類型。到了C++11,char16_tchar32_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字節,所以會編譯失敗。

主站蜘蛛池模板: 罗江县| 肥城市| 延边| 广水市| 综艺| 彭水| 禄劝| 盐亭县| 绍兴县| 石景山区| 凤台县| 福州市| 宝清县| 阜城县| 轮台县| 盐源县| 兖州市| 普兰店市| 石景山区| 潢川县| 大石桥市| 博野县| 龙山县| 陇南市| 新昌县| 九江县| 延川县| 根河市| 贺州市| 浑源县| 泗洪县| 沾化县| 襄樊市| 长宁县| 阿拉尔市| 长春市| 双辽市| 汽车| 松潘县| 巴中市| 佛山市|