Значение nullptr
Значение nullptr представляет собой константу нулевого указателя, которая имеет специальный тип std::nullptr_t. Оно было введено в стандарте C++11 для замены макроса NULL и целочисленного литерала 0, используемых для обозначения нулевого указателя. Главное преимущество nullptr заключается в типобезопасности: он не может быть неявно преобразован к целочисленным типам, кроме bool, что исключает двусмысленность при перегрузке функций. Синтаксически nullptr является ключевым словом и не требует включения каких-либо заголовочных файлов, хотя тип std::nullptr_t определён в заголовке <cstddef>.
Синтаксис
nullptr
Пример
Давайте рассмотрим простой пример, в котором указателю присваивается значение nullptr, а затем проверяется, является ли он нулевым:
#include <iostream>
using namespace std;
int main()
{
int* ptr = nullptr;
if (ptr == nullptr) {
cout << "ptr is null" << endl;
}
return 0;
}
Результат выполнения кода:
"ptr is null"
Пример
Давайте рассмотрим пример, демонстрирующий типобезопасность nullptr при перегрузке функций. В отличие от NULL, который может быть преобразован как к указателю, так и к целому числу, nullptr однозначно выбирает перегрузку с указателем:
#include <iostream>
using namespace std;
void func(int x)
{
cout << "Integer: " << x << endl;
}
void func(int* x)
{
cout << "Pointer: " << x << endl;
}
int main()
{
func(nullptr);
return 0;
}
Результат выполнения кода:
"Pointer: 0"
Пример
Давайте рассмотрим пример использования nullptr с умными указателями, где он также служит для обозначения отсутствия объекта:
#include <iostream>
#include <memory>
using namespace std;
int main()
{
shared_ptr<int> sp = nullptr;
if (!sp) {
cout << "shared_ptr is null" << endl;
}
sp = make_shared<int>(42);
cout << *sp << endl;
return 0;
}
Результат выполнения кода:
"shared_ptr is null"
42