эквивалентность нулевого указателя для int - PullRequest
3 голосов
/ 29 октября 2009

В «Языке программирования C ++» Бьярне пишет, что нулевой указатель не совпадает с целым нулем, но вместо этого 0 может использоваться как инициализатор указателя для нулевого указателя. Означает ли это, что:

void * voidPointer = 0;
int zero = 0;
int castPointer = reinterpret_cast<int>(voidPointer);
assert(zero == castPointer) // this isn't necessarily  true

1 Ответ

5 голосов
/ 29 октября 2009

Да, это означает, что castPointer не обязательно равен нулю, и утверждение может потерпеть неудачу. Поскольку константа нулевого указателя равна нулю, нулевой указатель некоторого типа не обязательно является адресом со всеми нулевыми битами.

reinterpret_cast не имеет специальных условий для выдачи нуля при приведении нулевого указателя на int. Вы можете достичь этого, используя логические операторы, которые инициализируют переменную либо 0, либо 1:

int castPointer = (voidPointer != 0);
...