exponenta event banner

Правило AUTOSAR C++ 14 A3-1-6

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

Описание

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

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

Объяснение

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

Методы, определенные внутри классов, неявно рассматриваются как встроенные методы. Встроить методы, определенные вне классов, можно явным образом с помощью 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