Потому что int()
дает 0
, который взаимозаменяем с NULL
.NULL
сам по себе определяется как 0
, в отличие от C NULL
, который равен (void *) 0
.
. Обратите внимание, что это будет ошибкой:
int* ptr = int(5);
, и это все равно будет работать:
int* ptr = int(0);
0
- это специальное постоянное значение, и поэтому оно может рассматриваться как значение указателя.Выражения констант, которые дают 0
, такие как 1 - 1
, также допускаются как константы нулевого указателя.