Google C++ Style не позволяет использовать исключения C++.

В данном отрывке вы можете найти анализ преимуществ и недостатков исключений. Авторы приходят к выводу, что исключения имеют больше преимуществ, но для унаследованного кода они вызовут больше проблем, чем преимуществ.

Строгий запрет на исключения вынуждает разработчиков использовать некоторые методы, чреватые ошибками (например, проверять, допустимо ли состояние объекта в каждом методе).

С другой стороны, неправильное использование исключений C++ может стать большой проблемой для служебных приложений, где программа должна тщательно обрабатывать ошибки и пытаться восстановить службу после них.

Это предложение состоит в том, чтобы разрешить использование исключений C++ в конструкторах, в
случае, когда объект должен получить какие-то ресурсы (память, файл и т.д.), а без них объект вообще не может работать и не может их получить позже.

Такой подход спасает объект от недопустимого состояния и нам не нужно писать что-то вроде этого:

Недостатком использования исключений в конструкторе является проблема с имитацией объектов в тестах. Если объект должен быть смоделирован, а в тестовой среде нет выделенных ресурсов, вы можете использовать интерфейсы:

Я не думаю, что это лучший подход для коммуникационных задач и других случаев, когда ресурс может быть доступен позже. Для этого мы можем использовать специальный метод, который возвращает код ошибки с атрибутом [[ nodiscard ]]: