1. 程式人生 > >C++:wchar_t 和C++新增型別:char16_t char32_t

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字首的問題..屬於廠商自定義.這個標準沒有確定死的.畢竟這只是廠商實現的輔助字元轉換的功能,而不是特定語法.
如果有疑問的話可以看這個: