AUTOSAR C++14 Rule A3-1-6

Тривиальное средство доступа и мутаторные функции должны быть встроены

Описание

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

Тривиальное средство доступа и мутаторные функции должны быть встроены.

Объяснение

Встроенные функции избегают времени выполнения наверху вызовов функции, но могут привести к чрезмерному увеличению размера кода. Если средство доступа (метод get) или мутатор (метод set), метод тривиален, чрезмерное увеличение размера кода, не является проблемой. Можно встроить эти методы, чтобы избежать ненужных издержек вызовов функции. Можно также постараться не повторять несколько элементов синтаксиса внутри и снаружи определения класса.

Методы, заданные в классах, неявно рассматриваются как встроенные методы. Можно встроить методы, заданные вне классов явным образом при помощи inline ключевое слово.

Реализация Polyspace

Чтобы определить, тривиален ли метод, средство проверки использует это критерии:

  • Метод доступа тривиален, если он не имеет никаких параметров и содержит один return оператор, который возвращает нестатический элемент данных или ссылку на нестатический элемент данных.

    Тип возврата метода должен точно соответствовать или быть ссылкой на тип элемента данных.

  • Мутаторный метод тривиален, если он имеет void возвратите тип, один параметр, и содержит один оператор присваивания, который присваивает параметр нестатическому элементу данных.

    Тип параметра должен точно соответствовать или быть ссылкой на тип элемента данных.

Средство проверки отмечает тривиальное средство доступа и мутаторные методы, заданные вне их классов без inline ключевое слово.

Средство проверки не отмечает методы шаблона или виртуальные методы.

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

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

Примеры

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

class PhysicalConstants {
    public:
       double getSpeedOfLight() const;
       void setSpeedOfLightInMedium(double newSpeed);
       double getRefractiveIndexGlass() { //Compliant
           return refractiveIndexGlass;
       }
    private:
       double speedOfLight;
       double refractiveIndexGlass;
};

double PhysicalConstants::getSpeedOfLight() const{ //Noncompliant
    return speedOfLight;
}

void PhysicalConstants::setSpeedOfLightInMedium(double newSpeed) {//Noncompliant
    speedOfLight = newSpeed;
}

В этом примере, методы доступа getSpeedOfLight и getRefractiveIndexGlass тривиальны. getSpeedOfLight метод задан вне его класса и несовместим. getRefractiveIndexGlass метод задан в определении класса и выполняет правило.

Тривиальный мутаторный метод setSpeedOfLightInMedium также задан вне определения класса и нарушает правило.

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

Группа: Фундаментальные понятия
Категория: консультация, автоматизированная
Введенный в R2020b