Недавно начал изучать с++. И в процессе возник вопрос, а именно о том чем nullptr
отличается от NULL
?
(К "динамической памяти" все это не имеет никакого прямого отношения.)
nullptr
совсем не обязательно "отличается" от NULL
. В современном С++, начиная с C++11, макро NULL
может быть определено именно как nullptr
.
"Классический" NULL
представляет собой целочисленное константное выражение1 со значением 0
, т.е. может использоваться не только в указательных, но также и в арифметических контекстах (в том числе - по ошибке). nullptr
не приводим к целому типу и в арифметических контекстах использован быть не может2.
Возможность использования "классического" NULL
в указательных контекстах базируется на том, что целочисленное константное значение 0
неявно приводимо к указательному типу. Однако такая неявная приводимость не имеет места в контексте аргументов шаблона. Т.е. NULL
не может выступать в качестве null-pointer constant в списке аргументов шаблона
template <void *p> struct S {};
int main()
{
S<NULL> s1; // Ошибка!
S<(void *) NULL> s2; // OK
S<nullptr> s3; // OK
}
nullptr
свободен от этого недостатка.
1 - в современном С++ (с момента появления nullptr
), NULL
должен быть определен как целочисленный литерал со значением 0
. Произвольное целочисленное константное выражение со значением 0
больше не может выступать в роли null-pointer constant. Также в роли null-pointer constant больше не может выступать false
и \0
.
2 - кроме возможности приведения к bool
.
NULL
это дефайн на 0
типа int
. nullptr имеет тип указателя, что очень важно в некоторых моментах. Очень подробно эту тему рассматривает Мэйерс в своей книге
Effective Modern C++, очень рекомендую вам её к прочтению.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Если я ещё не надоел, то в качестве тренировки мозгов предлагаю подумать над задачейВообще, я искренне верю, что любые, даже столь маленькие...
Возможно кто-то в курсе, каким образом можно создать анимацию, например плавное изменение цвета кнопки с помощью CSS, просто подключая, например: