Дж. Гай Дэвидсон - Красивый C++
30 главных правил чистого, безопасного и быстрого кодаНазвание: | Красивый C++ | |
Автор: | Дж. Гай Дэвидсон | |
Жанр: | Учебники и самоучители по компьютеру | |
Изадано в серии: | неизвестно | |
Издательство: | неизвестно | |
Год издания: | - | |
ISBN: | неизвестно | |
Отзывы: | Комментировать | |
Рейтинг: | ||
Поделись книгой с друзьями! Помощь сайту: донат на оплату сервера |
Краткое содержание книги "Красивый C++"
Читаем онлайн "Красивый C++". [Страница - 72]
—
использование макроса assert для обнаружения экземпляров ошибок второго типа, описанных в предыдущем разделе. С его помощью программист
задает ожидаемое состояние абстрактной машины в определенный момент,
а макрос проверяет фактическое состояние и останавливает программу, если
фактическое состояние окажется отличным от заданного. Ошибки этого
вида отличаются от ошибок нарушения состояния абстрактной машины:
они считаются ошибками программиста.
В развитие этой идеи рассматривалось еще одно предложение, которое чуть
не вошло в C++20. Фактически дело дошло до стадии рабочего проекта, но
в последнюю минуту продвижение было остановлено. Мы говорим о контрактах. Они определяют предварительные и заключительные условия на
уровне языка, а не на уровне библиотечного макроса. Тем самым программист получает возможность снабжать определение функции атрибутами,
определяющими также и ожидания.
К сожалению, на момент написания этих строк такое множество разно
образных обновлений языка и библиотеки еще не было включено в рабочий
1
www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p0709r4.pdf
214 Часть III. Прекратите это использовать
проект стандарта C++. В сообществе пользователей C++ многое остается
неизменным на протяжении долгих лет. Программисты все еще используют
старые стратегии обработки ошибок в стиле C из-за отсутствия лучшего
варианта.
Будущее выглядит светлым, но оно еще не наступило.
ПОДВЕДЕМ ИТОГ
zz
Глобальное состояние не годится для обработки ошибок. Сохраняйте
состояние ошибки локально и всегда обращайте на него внимание.
zz
Если есть возможность генерировать и перехватывать исключения,
используйте их.
zz
Различайте типы ошибок: неверный ввод, неверная логика, неверное
окружение и т. д.
zz
Если обработка исключений вам недоступна, подумайте о возможности использования Boost.Outcome, но не забывайте мониторить
предстоящие изменения в стандарте. Core Guidelines не охватывает
этот подход, потому что он выходит за рамки стандарта.
ГЛАВА 3.6
SF.7. Не используйте using
namespace в глобальной
области видимости
в заголовочном файле
НЕ ДЕЛАЙТЕ ЭТОГО
Пожалуйста, не делайте этого. Никогда.
Никогда. Ни за что. Ни разу.
Пожалуйста.
В Core Guidelines приводится следующий пример:
// bad.h
#include
using namespace std; // плохо --">
использование макроса assert для обнаружения экземпляров ошибок второго типа, описанных в предыдущем разделе. С его помощью программист
задает ожидаемое состояние абстрактной машины в определенный момент,
а макрос проверяет фактическое состояние и останавливает программу, если
фактическое состояние окажется отличным от заданного. Ошибки этого
вида отличаются от ошибок нарушения состояния абстрактной машины:
они считаются ошибками программиста.
В развитие этой идеи рассматривалось еще одно предложение, которое чуть
не вошло в C++20. Фактически дело дошло до стадии рабочего проекта, но
в последнюю минуту продвижение было остановлено. Мы говорим о контрактах. Они определяют предварительные и заключительные условия на
уровне языка, а не на уровне библиотечного макроса. Тем самым программист получает возможность снабжать определение функции атрибутами,
определяющими также и ожидания.
К сожалению, на момент написания этих строк такое множество разно
образных обновлений языка и библиотеки еще не было включено в рабочий
1
www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p0709r4.pdf
214 Часть III. Прекратите это использовать
проект стандарта C++. В сообществе пользователей C++ многое остается
неизменным на протяжении долгих лет. Программисты все еще используют
старые стратегии обработки ошибок в стиле C из-за отсутствия лучшего
варианта.
Будущее выглядит светлым, но оно еще не наступило.
ПОДВЕДЕМ ИТОГ
zz
Глобальное состояние не годится для обработки ошибок. Сохраняйте
состояние ошибки локально и всегда обращайте на него внимание.
zz
Если есть возможность генерировать и перехватывать исключения,
используйте их.
zz
Различайте типы ошибок: неверный ввод, неверная логика, неверное
окружение и т. д.
zz
Если обработка исключений вам недоступна, подумайте о возможности использования Boost.Outcome, но не забывайте мониторить
предстоящие изменения в стандарте. Core Guidelines не охватывает
этот подход, потому что он выходит за рамки стандарта.
ГЛАВА 3.6
SF.7. Не используйте using
namespace в глобальной
области видимости
в заголовочном файле
НЕ ДЕЛАЙТЕ ЭТОГО
Пожалуйста, не делайте этого. Никогда.
Никогда. Ни за что. Ни разу.
Пожалуйста.
В Core Guidelines приводится следующий пример:
// bad.h
#include
using namespace std; // плохо --">