AUTOSAR C++14 Rule A4-10-1

Только литерал nullptr должен использоваться в качестве ограничения нулевого указателя

Описание

Управляйте определением

Только литерал nullptr должен использоваться в качестве ограничения нулевого указателя.

Объяснение

nullptr был введен на C++ 11, чтобы поддержать концепцию указателя, который не указывает на доступный объект. Перед C++ 11, макро-NULL и постоянный 0 был единственными способами задать постоянного нулевого указателя. Используя nullptr указать на нулевых указателей имеет несколько преимуществ перед использованием NULL или 0. Например:

  • nullptr может использоваться с любым типом нулевого указателя, не требуя неявного броска.

  • nullptr литералы позволяют передачу параметра при помощи функции шаблона.

NULL макрос, который расширяется до целочисленного 0 который брошен в void* ввод. Используя NULL или 0 указать на нулевых указателей противоречит ожиданию разработчика. Если код, ожидающий nullptr обнаружение NULL или 0 вместо этого, это может привести к беспорядку или неожиданному поведению.

Реализация Polyspace

Polyspace® отмечает использование NULL или 0 вместо nullptr указать на нулевого указателя. Это правило не проверяет на преобразование между NULL и 0. Смотрите AUTOSAR C++14 Rule M4-10-1.

Поиск и устранение проблем

Если вы ожидаете нарушение правила, но не видите его, обратитесь к Кодированию Стандартных Нарушений, Не Отображенных.

Примеры

развернуть все

#include <cstdint>
#include <cstddef>


void foo(int*);
void foo2(int*);

void bar() {
    foo(NULL);    //Noncompliant
    foo2(0);      //Noncompliant
    foo(nullptr); //Compliant
}

В этом примере правило нарушено когда макро-NULL или постоянный 0 используется в качестве нулевого указателя вместо nullptr.

Проверяйте информацию

Группа: Стандартные преобразования
Категория: необходимый, автоматизированный
Введенный в R2020a