Входные и выходные параметры

  • Мы никогда не используем указатели как выходные параметры функции.
  • Все аргументы, передаваемые в функцию, являются ее входными параметрами.
  • Единственным исключением является передача в функцию изменяемой ссылки для проведения операции над этой ссылкой.
  • Мы не возвращаем из функции значения с помощью ключевого слова throw.

Аргументы по умолчанию

Мы не используем аргументы по умолчанию, так как это требует от пользователя функции производить дополнительную проверку ее сигнатуры. Аргументы по умолчанию в виртуальных функциях ведут к неопределенному поведению.

Если требуется указать опциональный аргумент, используйте std::optional для этой цели.

Синтаксис объявления функции

Мы используем современный синтаксис объявления функции во всех случаях (об исключениях к этому правилу ниже).

Мы также обязательно добавляем атрибут [[nodiscard]], если функция возвращает значение.

Пример правильно объявленной функции:

[[nodiscard]] auto add(int a, int b) -> int;

В случае работы с Qt-кодом (например, Q_INVOKABLE или сигналы), мы используем стандартный синтаксис объявления функции, так как moc до версии 6.5 не поддерживает новый синтаксис. В этом случае мы отключаем clang-tidy и ReSharper комментарием. Пример:

// NOLINTBEGIN
// ReSharper disable All
class QMLClass : public QObject {
  Q_OBJECT
  
  public: 
    Q_INVOKABLE void test();
 
  signals:
    void testSuccess();
    void testFailed();
};
// ReSharper restore All
// NOLINTEND

Далее: Возможности С++