exponenta event banner

Правило AUTOSAR C++ 14 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 если вы считаете это безопасным, добавьте комментарий, оправдывающий результат. См. раздел Результаты анализа пространства адресов с помощью исправлений ошибок или обоснований.

Поиск неисправностей

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

Примеры

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

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 не безопасен для отмены связи, поскольку A и B являются несвязанными классами. Dereferencing Aptr как если бы это был A* указатель может привести к недопустимому доступу к памяти.

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

Группа: Выражения
Категория: Обязательно, Автоматизировано
Представлен в R2019a