首页
/
每日頭條
/
科技
/
c語言中長字符串用什麼定義
c語言中長字符串用什麼定義
更新时间:2026-01-14 17:33:16

c語言中長字符串用什麼定義?目前互聯網應用中,例如大部分網站都已經使用 UTF-8 編碼,而 C 标準庫裡面,例如filesystem庫裡面關于文件路徑等,也是和 UTF-8 編碼相關,因此 C 标準也要優化對 UTF-8 編碼的支持,下面我們就來說一說關于c語言中長字符串用什麼定義?我們一起去了解并探讨一下這個問題吧!

c語言中長字符串用什麼定義(C20新特性)1

c語言中長字符串用什麼定義

新增 char8_t 類型表示 UTF-8 字符串

目前互聯網應用中,例如大部分網站都已經使用 UTF-8 編碼,而 C 标準庫裡面,例如filesystem庫裡面關于文件路徑等,也是和 UTF-8 編碼相關,因此 C 标準也要優化對 UTF-8 編碼的支持。

雖然在 C 11 中,已經增加了 UTF-8 字符串常量(u8"\xe4\xb8\xad\xe6\x96\x87"),但一直是使用 char * 作為類型。這樣導緻的問題,就是一個 char * 類型變量,可能是 UTF-8 編碼,也可能是多字節編碼(例如 GBK),因此為了區分不同的編碼類型,可能需要通過不同的函數名重載,或者模闆 traits 等技巧來進行區分。

因此在 C 20 中,将 UTF-8 字符串作為一種單獨的類型,增加了新的 char8_t 類型來進行描述。各種與字符串相關的模闆都增加 char8_t 相關的特化,例如 std 的字符串包裝類,就增加了 std::u8string 類型(std::basic_string<char8_t>)。

這個修改會造成不兼容,原來合法的代碼,可能會變得不合法,原來為了處理 UTF-8 字符串而特化成 char * 類型的模闆,需要改為特化 char8_t * 類型。

const auto * s1 = u8"text"; // <1> s1的類型,C 17 推導成const char *,C 20 推導成const char8_t * const char * s2 = u8"text"; // <2> C 17 正确,C 20 變成不正确 const char8_t * s3 = u8"text"; // <3> C 17 不正确(沒有char8_t類型),C 20 正确 template<typename T> int is_char8( const T * ) { return 0; } template<> int is_char8<char>( const char * ) { return 1; } std::cout << is_char8( s3 ) << std::endl; // <4> C 17 輸出1,C 20 輸出0 template<typename T> int is_char8_new( const T * ) { return 0; } template<> int is_char8_new<char8_t>( const char8_t * ) { return 1; } // <5> C 17 不支持 std::cout << is_char8_new( s3 ) << std::endl; // <6> C 20 輸出1 std::string s4 = u8"text"; // <7> C 17 正确,C 20 變成不正确 std::u8string s5 = u8"text"; // <8> C 17 不正确(沒有std::u8string類型),C 20 正确 std::filesystem::path p1; std::string s6 = p1.u8string(); // <9> C 17 正确,C 20 變成不正确 std::u8string s7 = p1.u8string(); // <10> C 17 不正确(沒有std::u8string類型),C 20 正确

明确 char16_t 和 char32_t 表示 UTF-16 和 UTF-32 字符串

之前的 C 标準新增 char16_t 和 char32_t 類型的時候,隻是說他們應該使用 UTF-16 和 UTF-32 的編碼格式,但标準裡面沒有明确進行這樣要求。

因此在 C 20 中,新增的 char8_t 類型明确要求是 UTF-8 字符串,同時将原來的 char16_t 和 char32_t 類型,也改為明确要求是 UTF-16 和 UTF-32 字符串。

明确不在 ISO 10646(Unicode編碼标準)中的字符的處理

之前的 C 标準,新增了字符串常量中的Unicode字符表達方式(\unnnn和\Unnnnnnnn),例如 \U0001f34 、 \uD83C\uDF4C 等,但對于不在 ISO 10646(Unicode編碼标準)中的字符的處理,則沒有明确說明。

因此在 C 20 中,明确要求Unicode字符表達方式(\unnnn和\Unnnnnnnn)中,如果有不在ISO 10646(Unicode編碼标準)中的字符,那麼這個代碼是不合法的。

【往期回顧】

C 20 新特性(9):指針和數組相關的兩個改進

C 20 新特性(8):range形式的for語句改進

,
Comments
Welcome to tft每日頭條 comments! Please keep conversations courteous and on-topic. To fosterproductive and respectful conversations, you may see comments from our Community Managers.
Sign up to post
Sort by
Show More Comments
推荐阅读
如何下載access
如何下載access
1、大家可以在搜索引擎免費下載office2010軟件”,因為access2010是從中提取的軟件。2、下載好數據包以後,要進行解壓,然後找到setup"進行安裝,進行下一步。3、然後找到”我接受此協議的條款在其前勾上,再點擊繼續”。4、我們選擇”自定義安裝。5、你可以選擇你所需要安裝的,如果你不需要安裝的可以在其選不可用”,這個在于個人意見。6、安裝過程中,可以查看安裝進度,這個要根據個人電腦網
2026-01-14
華為暢享20 plus的處理器是什麼處理器
華為暢享20 plus的處理器是什麼處理器
以華為暢享20Plus,Android11為例。華為暢享20Plus搭載聯發科MT68535G處理器,支持5G雙模七頻全網通,5G全場景智慧天線即使在雙手橫握打遊戲的情況下,也能減輕因遮擋天線導緻的信号衰減,内置4200mAh大電池,支持40W超級快充。華為技術有限公司,成立于1987年,總部位于廣東省深圳市龍崗區。華為是全球領先的信息與通信技術(ICT)解決方案供應商,專注于ICT領域,堅持穩健
2026-01-14
鍵盤剪切快捷鍵是什麼
鍵盤剪切快捷鍵是什麼
演示機型:華為MateBookX系統版本:win10鍵盤剪切快捷鍵是Ctrl+X。按住Ctrl鍵不放,再按X鍵,這是windows的一個快捷鍵,是剪切的意思,相當于複制粘貼完後删除。利用快捷鍵可以代替鼠标做一些工作,可以利用鍵盤快捷鍵打開、關閉和導航“開始”菜單、桌面、菜單、對話框以及網頁。快捷鍵:快捷鍵,又叫快速鍵或熱鍵,指通過某些特定的按鍵、按鍵順序或按鍵組合來完成一個
2026-01-14
養豬如何節省飼料
養豬如何節省飼料
1、品種選擇。在養豬的時候,如果想要有效的節省飼料的話,那麼選擇一個好的品種則是非常重要。在規模養殖的時候,最好是選擇三元雜交的商品豬,例如長白豬、大約克豬等。這種豬的身軀是比較大的,前胸豐滿并且四肢非常粗壯。豬之間會互相争搶飼料,因此能夠有效的縮短豬的生育期。隻要保證品種優質且沒有病的話,那麼豬的生長速度也是非常快的。初次之外,我們還要注意做好分豬舍飼養工作,每個豬舍的豬不宜過多,避免能量消耗過
2026-01-14
女士戶外拍照怎樣擺姿勢
女士戶外拍照怎樣擺姿勢
1、美好的笑臉,溫暖的笑容,總能給人親近感,一個笑臉,就能讓人覺得你好看很陽光可愛。2、不看鏡頭:可以仰望、也可以低頭、拍側臉側臉、向上向下45度,假裝沉思深沉。3、背影殺。就像詩人所說的那樣,你站在橋上看你的風景,而看風景的人則在樓上看你,景色裝飾給你看,你裝飾景物給别人看,多好的一個畫面。4、拍剪影。讓亮背景襯托下你吧,怕面對鏡頭的妹紙可用這招,不用很誇張的動作也不會有鮮明輪廓,唯美且浪漫。5
2026-01-14
Copyright 2023-2026 - www.tftnews.com All Rights Reserved