В чем разница между константой нулевого указателя (nullptr), значением нулевого указателя и значением указателя нулевого элемента?
Константа нулевого указателя - это либо nullptr (либо любое другое значение) типа std::nullptr_t
) или целочисленный литерал значения 0. Примеры констант нулевого указателя:
NULL // a macro for one of the others
0
0L
nullptr
std::nullptr_t fun();
fun() // also a null pointer constant
Из них не используйте целочисленные литералы или NULL, если вам не требуется поддержка более старых чем стандарт C ++ 11.
Значение нулевого указателя - это значение типа указателя, которое представляет собой нулевое значение. Примеры значений нулевого указателя:
(void*)nullptr // pointer to void
(int*)nullptr // pointer to object
using void_fun = void();
(void_fun*)nullptr // pointer to function
Значение указателя нулевого элемента - это значение типа указателя элемента, представляющего нулевое значение. Пример значений указателя нулевого элемента:
(int some_class::*)nullptr // pointer to data member
using mem_void_fun_ptr = void(some_class::*)(); // unfortunately cannot alias member
// function type as far as I know,
// so we alias pointer to it instead
(mem_void_fun_ptr)nullptr // pointer to member function
Обратите внимание, что std::nullptr_t
не является ни типом указателя, ни указателем на тип элемента.