AUTOSAR C++14 Rule A5-10-1

Указатель на представителя виртуальную функцию должен быть проверен только на равенство с null-указателем-константой

Описание

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

Указатель на виртуальную функцию представителя должен быть проверен только на равенство с null-указателем-константой.

Объяснение

Вызов представителя виртуальной функции разрешается компилятором во время выполнения до самой производной версии функции. Если вы используете операторы равенства (==) или (!=), чтобы сравнить что-либо, кроме константы нулевого указателя nullptr с указателем на представителя виртуальную функцию результат не задан.

Реализация Polyspace

Polyspace® флаги любой (==) или (!=) сравнение, где один операнд является указателем на представителя виртуальную функцию, а другой операнд не nullptr.

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

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

Примеры

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

class Base
{
public:
    virtual void f();
    void g();
};

template<typename T>
class Derived : public Base
{
public:
    void f();
};

void f()
{

    bool b = (&Derived<int>::f == &Derived<int>::f); // Noncompliant

    void (Derived<float>::* p)() = &Derived<float>::f;
    bool b1 = (&Derived<float>::f == p); // Noncompliant
    bool b2 = (p == p); // Noncompliant
    bool b3 = (p == nullptr); // Compliant

    void (Base::* q)() = &Base::g;
    bool b4 = (q == q); // Compliant

    void (Base::* r)() = &Base::f;
    bool b5 = (q == r); // Noncompliant

}

В этом примере результат сравнения в логическом b не совместима, потому что операнды указывают на представителя виртуальную функцию. Точно так же указатели p и r - указатели на представителя деклараторы, которые точка на представителя виртуальную функцию и флаги Polyspace, используемые ими в операциях сравнения равенств, за исключением сравнения p на nullptr.

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

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