This repository has been archived on 2023-05-13. You can view files and clone it, but cannot push or open issues or pull requests.
mipt_cpp/seminar01_overload/classroom_tasks/code/04other/01nulptr.cpp

50 lines
1.3 KiB
C++
Raw Normal View History

2022-09-01 16:37:41 +03:00
#include <cstdio>
/*
Новое специальное нулевое значение для указателя: nullptr
В языке C для этой цели использовался NULL, который был просто числом 0
Если определить NULL так:
#define NULL (void*)0
То, в отличии от языка C, в языке C++ простая строка вида:
int* p = NULL;
не сработает, так как слева стоит int* а справа void*
Если определить NULL так:
#define NULL 0
то в C++ могут возникнуть проблемы с перегрузкой, как это показано ниже.
*/
void print(int value)
{
printf("Int: %d\n", value);
}
void print(void* pointer)
{
printf("Pointer: %p\n", pointer);
}
int main()
{
void* p1 = NULL;
void* p2 = nullptr;
// Всё ОК (компилятор может выбрать функцию):
print(p1);
print(p2);
// Тут неверно (компилятор не может выбрать перегруженную функцию, произойдёт ошибка):
print(NULL);
// Тут всё OK:
print(nullptr);
}