Разница между NULL и nullptr в современных компиляторах заключается в том, что NULL — это макрос, который в зависимости от реализации может раскрываться в 0 или nullptr, а nullptr — это ключевое слово, представляющее нулевой указатель. 45
NULL традиционно — это константа, определяемая реализацией, представляющая нулевой указатель, обычно целочисленное 0. 1 nullptr, введённый в C++11, обеспечивает более чёткое и безопасное для типов значение указателя, представляющее пустой (нулевой) указатель. 15
Таким образом, основное различие между NULL и nullptr заключается в том, что NULL может быть неопределённым по типу, а nullptr явно обозначает тип указателя, что помогает компилятору эффективнее ловить ошибки, когда ожидается тип указателя, а даётся целочисленное значение. 5