Я часто вижу следующие термины в интервью C ++:
Я не уверен, что ясно вижу различия между этими терминами. Может ли кто-нибудь дать четкое краткое объяснение?
Редактировать : контекстный вопрос был: «Что происходит, когда вы дважды удаляете указатель?«но знание различий между этими терминами для меня важнее, чем просто ответ.
Это на самом деле не относится к C ++.
Прервать — это когда вы завершаете программу или конкретную операцию из-за проблемы. Есть функция библиотеки C ++ std::abort
, унаследовано от библиотеки C, которая как бы убивает программу внешним сигналом и не запускает деструкторы или очистку.
Ошибка, когда что-то идет не так. В C ++ многие виды ошибок не обязательно обнаруживаются сразу. C ++ вместо этого указывает неопределенное поведение, что может повлечь за собой тихое повреждение памяти, которое позже может вызвать таинственное неправильное поведение.
Ошибка — это когда программа делает не то, что нужно. Это довольно общий инженерный термин. Пышноволосый босс, вероятно, более знаком с этой концепцией, чем другие, потому что это единственный, о котором клиент действительно знает.
Ловушка — это когда программа обнаруживает состояние ошибки и предпринимает соответствующие действия.
Поэтому, если вы обнаружите, что сеть вышла из строя, и покажете пользователю сообщение, такое как «Не удалось продолжить; ваш документ был автоматически сохранен» перед выходом, то вы поймали ошибку и прервали ее, но, тем не менее, произошел сбой.
Все эти термины немного расплывчаты, особенно ошибки и неудачи. Они в основном означают одно и то же: что-то не так. Прерывание программы, вероятно, относится к вызову стандарта библиотеки C выкинуть функция, которая вызывает сигнал SIGABRT. Это обычно приводит к неблаговидному завершению программы, но зависит от платформы и от того, пойман ли сигнал. Trap может относиться к перехвату сигнала в целом, который контролируется стандартом библиотеки C сигнал функция.