Тип nullptr_t
Тип nullptr_t - это фундаментальный тип в C++, который представляет
собой тип литерала nullptr. Он был введён в стандарте C++11
для решения проблемы неоднозначности при передаче нулевого указателя
в перегруженные функции. Переменная типа nullptr_t может
хранить только одно значение - nullptr, и неявно преобразуется
к любому типу указателя, но не к целочисленным типам. Это делает его
более безопасной альтернативой макросу NULL.
Синтаксис
std::nullptr_t variable = nullptr;
Тип nullptr_t определён в заголовочном файле <cstddef>
и доступен в пространстве имён std. Литерал nullptr
имеет тип std::nullptr_t.
Пример
Давайте объявим переменную типа nullptr_t и присвоим ей
значение nullptr, а затем проверим её на равенство нулевому
указателю:
#include <iostream>
#include <cstddef>
using namespace std;
int main()
{
nullptr_t ptr = nullptr;
if (ptr == nullptr) {
cout << "ptr is null" << endl;
}
return 0;
}
Результат выполнения кода:
"ptr is null"
Пример
Давайте создадим указатель типа int* и присвоим ему значение
nullptr, а затем проверим, что он не указывает на память:
#include <iostream>
using namespace std;
int main()
{
int* p = nullptr;
if (p == nullptr) {
cout << "Pointer is null" << endl;
}
return 0;
}
Результат выполнения кода:
"Pointer is null"
Пример
Давайте используем nullptr в перегруженной функции, чтобы
показать, что компилятор выбирает версию для указателя, а не для
целого числа:
#include <iostream>
using namespace std;
void func(int) {
cout << "Function with int" << endl;
}
void func(int*) {
cout << "Function with pointer" << endl;
}
int main()
{
func(nullptr);
return 0;
}
Результат выполнения кода:
"Function with pointer"