в 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?
Реализация __null как G ++ внутренняя.Вы не найдете его в заголовочном файле или чем-то в этом роде.Вы можете найти некоторое объяснение логики здесь , но основная идея состоит в том, что это самый простой способ убедиться, что NULL сначала рассматривается как указатель.
__null
По сути, внутреннее выполняет то, что вы наивно делаетеожидать reinterpret_cast<void *>(0), чтобы сделать.
reinterpret_cast<void *>(0)