Динамическая память/С++

117
07 сентября 2021, 05:50

Недавно начал изучать с++. И в процессе возник вопрос, а именно о том чем nullptr отличается от NULL?

Answer 1

(К "динамической памяти" все это не имеет никакого прямого отношения.)

  1. nullptr совсем не обязательно "отличается" от NULL. В современном С++, начиная с C++11, макро NULL может быть определено именно как nullptr.

  2. "Классический" NULL представляет собой целочисленное константное выражение1 со значением 0, т.е. может использоваться не только в указательных, но также и в арифметических контекстах (в том числе - по ошибке). nullptr не приводим к целому типу и в арифметических контекстах использован быть не может2.

  3. Возможность использования "классического" 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.

Answer 2

NULL это дефайн на 0 типа int. nullptr имеет тип указателя, что очень важно в некоторых моментах. Очень подробно эту тему рассматривает Мэйерс в своей книге Effective Modern C++, очень рекомендую вам её к прочтению.

READ ALSO
Поиск всех вариантов праймеров для известного генома возбудителя болезни

Поиск всех вариантов праймеров для известного генома возбудителя болезни

Если я ещё не надоел, то в качестве тренировки мозгов предлагаю подумать над задачейВообще, я искренне верю, что любые, даже столь маленькие...

281
Отправить файл на (web-сервер) с си клиента (openssl)

Отправить файл на (web-сервер) с си клиента (openssl)

Не получается отправить файл

334
Анимация css в Qt. C++

Анимация css в Qt. C++

Возможно кто-то в курсе, каким образом можно создать анимацию, например плавное изменение цвета кнопки с помощью CSS, просто подключая, например:

132
Размер класса в определенной иерархии

Размер класса в определенной иерархии

Почему объект класса A занимает 4 байта?

112