120 void ClassName::DoProcess(
void)
126* - В определении функции сначала ставить входные, затем выходные параметры.
127* - Параметры, являющиеся результатом работы функции должны передаваться через
128* указатели(ссылки - только константные!).
129* - Параметры, являющиеся результатом работы функции, должны быть помечены
133void GetValue(
int * _pValue);
137* Правила именования переменных/функций/классов/файлов
138* ----------------------------------------------------
140* - Имена переменных должны быть существительными, функций -
141* глаголами/командами.
142* - Имена файлов должны совпадать с именами объявленных в них классов (включая
144* - \ref IdentifiersAnchor
"Правила именования идентификаторов".
149* - Каждый отдельный модуль программы должен иметь свое пространство имен.
150* - Не использовать директиву
using namespace вне функций.
151* - Пространство имен должно завершаться комментарием
"} // namespace <name>".
152* - Код внутри пространства имен должен идти по левому краю.
153* - Вместо статических констант использовать константы в не именованных
154* пространствах имен (использовать их в заголовочных файлах только для
155* объявления констант!).
157* Конструкторы/деструкторы
158* ------------------------
160* - Всегда явным образом определять конструктор по умолчанию, инициирующий
161* внутренние переменные класса.
162* - Использовать ключевое слово
explicit для конструкторов с одним аргументом.
163* - Если класс не имеет явного конструктора копирования, наследовать его от
165* - Деструктору всегда явным образом указывать
noexcept.
170* \anchor Example1Anchor
172* Пример 1: Перечисления
173* ----------------------
193Status::Value CurrentStatatus = Status::Stop;
210 static constexpr T PI =
static_cast<T
>(math::PI);
216auto DoublePI = 2.0f * Constant<float>::PI;
220* \anchor Example2Anchor
222* Пример 3: Именование параметров
223* -------------------------------
227const bool IsSsuccess = CalculateSomething(InterestingValue,
238const bool IsSuccess = CalculateSomething(InterestingValue,
245* Или, в качестве альтернативы, используя константы или само-описывающие переменные:
249const int DefaultBaseValue = 10;
250const bool IsFirstTimeCalling =
false;
251Callback * fnNullCallback =
nullptr;
253const bool IsSuccess = CalculateSomething(InterestingValue,
263* - Запятые в списке инициализации переменных в конструкторе ставить после
265* - Вместо \<iostream\> в заголовочных файлах писать \<iosfwd\> для ускорения
267* - Для быстрого копирования потоков ввода - вывода(из одного в другой),
268* использовать функцию потока .rdbuf() (cout << file.rdbuf()).
269* - С помощью функции std::uncaught_exception можно проверить, как завершает
270* работу функция: это нормальный возврат или было выброшено исключение.
271* - Преобразовывайте тип числа с плавающей точкой в целочисленный тип
272* исключительно через функции стандартной библиотеки(«round», «floor», «ceil»
274* - Для инициализации переменных использовать списки инициализации (они не
275* позволяют сужение типов:
int x1 = { 7.3 };
276* - Профайлер не может подсказать, какие
inline функции не должны быть
278* - Строки хранить в отдельном файле (лучше.cpp).
279* - Исключение не должно покидать деструктор (особенно это касается работы
280* с контейнерами STL).
281* - Для класса предоставлять функцию swap() (она должна быть бессбойной!),
282* которую можно использовать для присваивания со строгими гарантиями
283* безопасности (для примитивных типов использовать std::swap())
286T & T::operator= (T Temp)
293* - Для отсортированного набора объектов можно использовать индексные
294* контейнеры, содержащие итераторы на основной контейнер.
295* - Для добавления элементов в контейнер предпочтительнее использовать операции
297* - container<T>(c).swap(c);
299* - container<T>().swap(c);
301* - find / find_if и count / count_if - поиск в неотсортированном диапазоне.
302* - lower_bound, upper_bound, equal_range(реже binary_search) - поиск
303* в отсортированном диапазоне.
304* - Функциональные объекты должны содержать константный operator().
305* - Побочные подзадачи выделять в отдельный код.