2009-10-29 1 views
3

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

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

ответ

5

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

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

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

Интересно, если кто-нибудь может указать систему, в которой реализация указателя NULL не является связка нулевых битов. Просто любопытно, есть ли там. –

+0

Есть. Я не могу назвать ни одного, но я столкнулся с ними раньше, в таких дискуссиях. :) – jalf

 Смежные вопросы

  • Нет связанных вопросов^_^