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?
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?
__null
的實現是作爲G ++內部的。你不會在頭文件或類似的東西中找到它。你可以找到邏輯here的一些解釋,但基本的想法是確保NULL被首先看作指針是最簡單的方法。
基本上,內部做你會天真地期望reinterpret_cast<void *>(0)
要做的事情。
有沒有什麼辦法來檢測它的類型? – wenlujon 2012-01-09 06:28:53
它的類型是'魔術',取決於上下文。這就是G ++必須將其作爲內部實現的原因。沒有常規類型提供精確正確的語義。它的行爲大致類似於'void *',但不完全。 – 2012-01-09 06:31:06