(σ゚∀゚)σ
[廢] 新知環節
久違的又有新知了
不知道今天會不會有更多新知
(σ゚∀゚)σ
昨天在改某段 code 結果一直噴錯
噴的錯誤內容是沒有辦法把一個 const wchar_t* 的東西丟進要 PWCHAR 的地方當 input parameter
(σ゚∀゚)σ
原本以為是目標 function 的那個參數沒有下 const
但實際去看是有的
(σ゚∀゚)σ
後來仔細看了一下他寫的是 const PWCHAR
這就是機巴的問題所在
(σ゚∀゚)σ
PWCHAR 是微軟不知道哪時候發神經作的其中一個 typedef
代表的是 WCHAR*
WCHAR 也是 typedef,代表的是 wchar_t
(σ゚∀゚)σ
所以理論上應該要長得一樣 (嗎
但實際上沒有
(σ゚∀゚)σ
const PWCHAR 代表的是 PWCHAR 的那個變數本身在宣告後不可以指到其他記憶體
寫成最基礎的形式 (有可能) 長這樣
wchar_t * const
(讀作: const pointer of wchar_t)
會不太確定是不是這樣寫是因為平常很少會需要這樣做
(σ゚∀゚)σ
而我本來要的是 const WCHAR*

寫成最基礎的形式是 const wchar_t*
(讀作: pointer of const wchar_t)
(σ゚∀゚)σ
這個的意思是
這個 pointer 所指到的記憶體
存放的資料不可以改變
(σ゚∀゚)σ
反而前者的那個寫法,雖然被限制了不可以指到其他記憶體,但記憶體中存放的資料本身是可以改變的
(σ゚∀゚)σ
而且這個寫法寫在 function 的 input parameter 的時候是沒有意義的
在 compile 的時候那個 const 就會直接被拿掉
這也是為什麼在看 error 的時候沒有看到 const 的字眼 (by 家裡ㄉ人
(σ゚∀゚)σ
所以說當初幹嘛長 PWCHAR 這種北七的寫法
載入新的回覆