C++:wchar_t 和C++新增型別:char16_t char32_t
wchar_t:wchar_t是初學C/C++的筒子們不經常用到的型別。
首先說一下
什麼是wcha_t:
wchar_t是C/C++的字元型別,是一種擴充套件的儲存方式,主要用在國際化程式的實現中。
wchar_t 存在的原因:
char是八位字元型別,最多能包含256中字元,許多的外文字符集所包含的字元數目超過256個,char型不能表示。
wchar_t資料大小:
資料型別一般為16或者32位,不同的C/C++庫有不同的規定。總之:wchar_t所能表示的字元遠遠多於char型別。
wchar_t的輸入輸出處理:
cin和cout將輸入和輸出看作是char流,因此不適合用於處理wchat型別,iostream標頭檔案提供了wcin 和wcout用於處理輸入輸出流另外可以通過加上字首L來只是寬字元常量和寬字串
程式碼示例:
#include<iostream>
using namespace std;
locale loc("chs");
int main()
{
wchar_t wStr[] = L"我使用了wcha_t型別";
wcout.imbue(loc);
wcout << wStr << endl;
return 0;
}
關於此程式碼中的local,(系統區域設定,即國家或者地區設定),是用來決定當前所使用的當前語言編碼,日期格式,數字格式,等有關的設定,
char16_t和char32_t:
產生原因:
隨著程式設計人員日益的熟悉Unicode,,型別wchar_t顯然已經滿足不了需求,在計算機系統上進行的編碼字元和字串編碼時,僅僅使用Unicode碼點顯然是不夠的,
比如:如果在進行字串編碼時,如果有特定長度和符號特徵的型別將很有幫助,而型別wchar_t的長度和符號特徵隨實現而已,因此C++11新增了型別char16_t,,char32_t。
char16_t:無符號型別,長16位,
char32_t無符號型別,長32位
C++11使用字首u表示char16_t字元常量和字串常量如:u‘L’;u“lilili”;
C++11使用字首U表示char32_t字元常量和字串常量如:U'L';U"lilili";
型別char16_t與/u00F6形式的通用字元名匹配,
型別char32_t與/U0000222B形式的通用字元名匹配。
字首u和U分別指出字元字面值的型別為char16_t和char32_t。
注意:
如果你在VS中使用char16_t或者char32_t的話,不要加字首u或者U只能加字首L.
至於L還是u字首的問題..屬於廠商自定義.這個標準沒有確定死的.畢竟這只是廠商實現的輔助字元轉換的功能,而不是特定語法.
如果有疑問的話可以看這個: