exponenta event banner

Правило AUTOSAR C++ 14 A11-3-1

Объявления друзей не должны использоваться

Описание

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

Заявления друзей не должны использоваться.

Объяснение

Функция объявляется в качестве друга класса для доступа к частным членам класса вне области класса.

class A
{
  int data;
  public:
    // operator+ can access private members of class A such as data
    friend A const operator+(A const& lhs, A const& rhs);
};
Функции друзей и классы друзей уменьшают инкапсуляцию данных. Частные члены класса больше не доступны только с помощью методов класса.

Ведение кода с функциями друга может быть затруднено. Например, если класс myClass имеет класс друзей anotherClass, при изменении элемента данных myClass, вы должны найти все случаи его использования в функциях-членах anotherClass.

Внедрение Polyspace

Средство проверки правил помечает все виды использования friend ключевое слово.

Шашка следует спецификациям AUTOSAR C++ 14 релиза 18-03 (март 2018 года). Однако версия 18-10 и более поздние версии AUTOSAR C++ 14 допускают исключение для операторов сравнения, таких какoperator==. Если средство проверки правил помечает использование операторов сравнения, добавьте комментарий, оправдывающий результат. См. раздел Результаты анализа пространства адресов с помощью исправлений ошибок или обоснований.

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

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

Примеры

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

class myClass
{ 
    int data;
public:
    myClass& operator+=(myClass const& oth);
    friend myClass const operator+(myClass const& lhs, // Noncompliant: Use of friend keyword
                                   myClass const& rhs);

};

operator+ является функцией друга класса myClass и может получить доступ к своему частному члену, data. Наличие этой функции друга нарушает правило.

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

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