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

1.2.3 wchar_t存在的問題

在C++98的標(biāo)準(zhǔn)中提供了一個wchar_t字符類型,并且還提供了前綴L,用它表示一個寬字符。事實上Windows系統(tǒng)的API使用的就是wchar_t,它在Windows內(nèi)核中是一個最基礎(chǔ)的字符類型:

HANDLE CreateFileW(
 LPCWSTR lpFileName,
 );

CreateFileW(L"c:\\tmp.txt", );

上面是一段在Windows系統(tǒng)上創(chuàng)建文件的偽代碼,可以看出Windows為創(chuàng)建文件的API提供了寬字符版本,其中LPCWSTR實際上是const wchar_t的指針類型,我們可以通過L前綴來定義一個wchar_t類型的字符串字面量,并且將其作為實參傳入API。

討論到這里讀者會產(chǎn)生一個疑問,既然已經(jīng)有了處理寬字符的字符類型,那么為什么又要加入新的字符類型呢?沒錯,wchar_t確實在一定程度上能夠滿足我們對于字符表達的需求,但是起初在定義wchar_t時并沒有規(guī)定其占用內(nèi)存的大小。于是就給了實現(xiàn)者充分的自由,以至于在Windows上wchar_t是一個16位長度的類型(2字節(jié)),而在Linux和macOS上wchar_t卻是32位的(4字節(jié))。這導(dǎo)致了一個嚴(yán)重的后果,我們寫出的代碼無法在不同平臺上保持相同行為。而char16_tchar32_t的出現(xiàn)解決了這個問題,它們明確規(guī)定了其所占內(nèi)存空間的大小,讓代碼在任何平臺上都能夠有一致的表現(xiàn)。

主站蜘蛛池模板: 宁安市| 葫芦岛市| 莱阳市| 修文县| 泸溪县| 上犹县| 轮台县| 鄂尔多斯市| 班玛县| 江西省| 渝北区| 新巴尔虎右旗| 龙州县| 定结县| 冕宁县| 惠水县| 长白| 澄城县| 阿克陶县| 肃宁县| 本溪| 清水河县| 台南市| 玉环县| 盘山县| 青龙| 沁阳市| 体育| 正安县| 白城市| 中卫市| 清远市| 贵溪市| 九龙坡区| 南城县| 托克逊县| 恩平市| 天津市| 城市| 友谊县| 新乡县|