где __null определяется в g ++? - PullRequest
5 голосов
/ 09 января 2012

в g ++, NULL определяется как __null, в 64-битном случае __null - 8 байтов. такие как:

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

однако, где определяется __null?

1 Ответ

7 голосов
/ 09 января 2012

Реализация __null как G ++ внутренняя.Вы не найдете его в заголовочном файле или чем-то в этом роде.Вы можете найти некоторое объяснение логики здесь , но основная идея состоит в том, что это самый простой способ убедиться, что NULL сначала рассматривается как указатель.

По сути, внутреннее выполняет то, что вы наивно делаетеожидать reinterpret_cast<void *>(0), чтобы сделать.

...