AUTOSAR C++14 Rule A5-3-1

Оценка операнда оператору typeid не должна содержать побочных эффектов

Описание

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

Оценка операнда оператору typeid не должна содержать побочных эффектов.

Объяснение

The typeid оператор оценивает свой операнд только, если это вызов функции, которая возвращает ссылку на полиморфный тип (полиморфный тип является типом класса, содержащим виртуальные функции). Во всех других случаях выражения, предоставляемые typeid оператор не оценивается.

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

Реализация Polyspace

Шашечные флаги typeid операторы с выражениями, тип которых может быть определен только во время выполнения. Все такие выражения приняты имеющими побочные эффекты.

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

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

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

Примеры

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

#include <iostream>
#include <typeinfo>

class Base
{
public:
    virtual ~Base();
};

class Derived: public Base
{
public:
    ~Derived();
};

Base& getObj();

void main()
{

    Base& b = getObj();

    std::cout << "Dynamic type:" << typeid(getObj()).name(); //Noncompliant
    std::cout << "Dynamic type:" << typeid(b).name(); //Compliant
}

Правило нарушается, когда typeid операнд включает вызов функции.

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

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