Входные и выходные параметры
- Мы никогда не используем указатели как выходные параметры функции.
- Все аргументы, передаваемые в функцию, являются ее входными параметрами.
- Единственным исключением является передача в функцию изменяемой ссылки для проведения операции над этой ссылкой.
- Мы не возвращаем из функции значения с помощью ключевого слова
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