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
2022-09-01 16:37:41 +03:00

50 lines
No EOL
1.3 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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);
}