2012-01-09 12 views
4

in g ++,NULL被定義爲__null,在64位的情況下,__null是8個字節。如:其中是在g ++中定義的__null?

printf("sizeof(__null):%d, sizeof(0):%d\n", sizeof(__null), sizeof(0)); 
sizeof(__null):8, sizeof(0):4 

但是,其中是否定義了__null?

回答

6

__null的實現是作爲G ++內部的。你不會在頭文件或類似的東西中找到它。你可以找到邏輯here的一些解釋,但基本的想法是確保NULL被首先看作指針是最簡單的方法。

基本上,內部做你會天真地期望reinterpret_cast<void *>(0)要做的事情。

+0

有沒有什麼辦法來檢測它的類型? – wenlujon 2012-01-09 06:28:53

+1

它的類型是'魔術',取決於上下文。這就是G ++必須將其作爲內部實現的原因。沒有常規類型提供精確正確的語義。它的行爲大致類似於'void *',但不完全。 – 2012-01-09 06:31:06

相關問題