Не должно быть циклов между библиотеками
Причина
- Цикл осложняет процесс сборки.
- Циклы трудно понять и могут привести к недетерминизму (неопределенному поведению).
Примечание
Библиотека может содержать циклические ссылки в определении своих компонентов. Например:
???
Однако библиотека не должна зависеть от другой, которая зависит от нее.
NR: Не-правила и мифы
Этот раздел содержит правила и рекомендации, которые популярны где-то, но которые мы намеренно не рекомендуем. Мы прекрасно знаем, что были времена и места, когда эти правила имели смысл, и мы сами их использовали. Однако в контексте стилей программирования, которые мы рекомендуем и поддерживаем руководствами, эти "не-правила" причинили бы вред.
Даже сегодня могут быть контексты, где правила имеют смысл. Например, отсутствие надлежащей поддержки инструментов может сделать исключения неподходящими в системах жесткого реального времени, но пожалуйста, не наивно доверяйте "общепринятой мудрости" (например, неподтвержденным заявлениям об "эффективности"); такая "мудрость" может быть основана на информации десятилетней давности или опыте из языков со свойствами, очень отличающимися от C++ (например, C или Java).
Положительные аргументы в пользу альтернатив этим не-правилам приведены в предложенных правилах как "Альтернативы".
Сводка не-правил:
- NR.1: Не настаивайте на том, чтобы все объявления были в начале функции
- NR.2: Не настаивайте на единственном
return-оператор в функции - NR.3: Не избегайте исключения
- NR.4: Не настаивайте на размещении каждого определения класса в собственном исходном файле
- NR.5: Не используйте двухфазную инициализацию
- NR.6: Не размещайте все действия очистки в конце функции и
goto exit - NR.7: Не делайте члены данных
protected - ???