exponenta event banner

AUTOSAR C++14 Rule A5-2-4

reinterpret_cast не должны использоваться

Описание

Определение правила

reinterpret_cast не должны использоваться.

Объяснение

reinterpret_cast обычно используется для явного преобразования между двумя несвязанными типами данных. Например, в этом примере reinterpret_cast преобразует тип struct S* на int*:

struct S { int x; } s;
int* ptr = reinterpret_cast<int*> (&s);

Однако использовать его сложно reinterpret_cast и не нарушать безопасность типа. Если результат reinterpret_cast является указателем, его безопасно разыменовать только после того, как вы приведете указатель назад к его исходному типу.

Реализация Polyspace

Средство проверки правил помечает все виды использования reinterpret_cast ключевое слово.

Если средство проверки правил помечает использование reinterpret_cast что вы считаете безопасным, добавьте комментарий, обосновывающий результат. Смотрите Адрес Результаты Polyspace через исправления ошибок или обоснования.

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

Если вы ожидаете нарушения правил, но не видите его, обратитесь к разделу «Стандартные нарушения кодирования не отображаются».

Примеры

расширить все

class A {
    int x;
    int y;
    public:
      void getxy();
};

class B {
    int z;
    public:
      void getz();
};

void func (B* Bptr) {
    A* Aptr = reinterpret_cast<A*>(Bptr); // Noncompliant
}

Использование reinterpret_cast нарушает это правило. Результат reinterpret_cast не безопасно для dereference, так как A и B являются несвязанными классами. Размежевание Aptr как будто это A* указатель может привести к неправильному доступу к памяти.

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

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