- 現(xiàn)代C++語言核心特性解析
- 謝丙堃
- 419字
- 2021-09-27 17:49:48
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_t
和char32_t
的出現(xiàn)解決了這個問題,它們明確規(guī)定了其所占內(nèi)存空間的大小,讓代碼在任何平臺上都能夠有一致的表現(xiàn)。
推薦閱讀
- C++程序設(shè)計(第3版)
- 零基礎(chǔ)PHP學(xué)習(xí)筆記
- Building a Home Security System with Raspberry Pi
- Getting Started with PowerShell
- Visual C++串口通信技術(shù)詳解(第2版)
- Amazon S3 Cookbook
- Mastering Apache Maven 3
- 深度學(xué)習(xí):Java語言實現(xiàn)
- Python Data Science Cookbook
- 深度學(xué)習(xí)原理與PyTorch實戰(zhàn)(第2版)
- Clean Code in C#
- MINECRAFT編程:使用Python語言玩轉(zhuǎn)我的世界
- Mastering Apache Storm
- QlikView Unlocked
- SignalR:Real-time Application Development(Second Edition)