→ purincess:那可以用C++11的nullptr嗎 09/03 19:53
推 azureblaze:0是零 NULL是指向0x0的指標 '\0'是字串結尾 09/03 20:12
→ azureblaze:數值一樣可是意義不相同 09/03 20:13
→ azureblaze:time(time_t *timer ) 吃指標所以用NULL比較好 09/03 20:13
去查了
http://en.wikipedia.org/wiki/C%2B%2B11#Null_pointer_constant
C++ didn't adopt the same behavior [of using preprocessor macro NULL],
allowing only 0 as a null pointer constant.
NULL 是 C 裡面為了區別 0 有空指標和「零」這個數字的雙重身份而做出來的巨集
但 C++ 沒有使用這個的習慣, 而是兩個狀況都直接用 0
C++11 的 nullptr 就是為了解決這個問題才出現的
http://www.stroustrup.com/bs_faq2.html#null
Bjarne Stroustrup 的看法應該夠有分量吧XD
In C++, the definition of NULL is 0.
I prefer to avoid macros, so I use 0.
Another problem with NULL is that people sometimes mistakenly believe that
it is different from 0 and/or not an integer.
維基百科的頁面有稍微詳細的解釋
在 C 中, NULL 有時會被展開為 ((void *)0), 不是 int 而是 void *
但是 C++ 標準並不是這樣規定, 而是把 NULL 直接展開為 0
所以用 NULL 和 0 的作用完全相同
但不熟悉的人可能會誤以為 C++ 中看到這個 macro 也可以視為指標
由於 C++ 有函式重載, 這個誤解反而會造成問題
void foo(char *);
void foo(int);
即使使用 NULL, 在 C++ 中還是會使用第二個, 而不是第一個
所以與其造成這個誤會, 不如直接都用 0 比較好
當然如果有 nullptr 的話就要用
--
Les grandes et les meilleurs tone from "Zadok the Priest"
Eine grosse stattliche Veranstaltung by F. Handel
THE MAIN EVENT! These are the men
Sie sind die Besten
"Champions League" by Tony Britten THESE ARE THE CHAMPIONS!
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.32.81.146
→ purincess:好的~ 感謝 09/03 21:05
推 azureblaze:不過我覺得在callsite看到func(0,NULL,'0',0.0)的時候 09/03 21:12
→ azureblaze:有NULL會比較容易猜出那個參數是什麼樣的東西 09/03 21:12
→ azureblaze:特別像是WINAPI這種optional pointer一大堆的地方 09/03 21:13
→ azureblaze:不過我也希望到處都有C++11可以用XD 09/03 21:14
推 purpose:就跟匈牙利命名法一樣,現在你用 IDE 隨便都能快速調出 09/03 21:20
→ purpose:變數、函數的宣告資訊,所以匈牙利的必要性降低,用不用 09/03 21:20
→ purpose:NULL 也很容易知道形式參數需要的是個指標 09/03 21:21
→ Favonia:「空指標」和「空指標常數」是不一樣的東西... 09/03 22:12