std :: abort і std :: exit (і більше: std :: _ Exit, std :: quick_exit) - це лише функції нижчого рівня. Ви використовуєте їх, щоб сказати програмі, що ви хочете, щоб вона точно робила: які деструктори (і якщо) викликати, які інші функції очищення потрібно викликати, яке значення повернути тощо.
std :: термінація - це абстракція вищого рівня: її викликають (або час виконання, або ви), щоб вказати, що сталася помилка в програмі і чомусь неможливо впоратися, кинувши виняток. Необхідність цього зазвичай виникає, коли в самому механізмі винятку виникає помилка, але ви можете використовувати її будь-коли, коли не хочете, щоб ваша програма продовжувалась перевищувати задану помилку. Я склав повний перелік ситуацій, коли викликається std :: endinate в моєму посту. Не вказано, що робить std :: термінал, оскільки ви цим керуєте. Ви можете налаштувати поведінку, зареєструвавши будь-які функції. У вас є обмеження, що функція не може повернутися на сайт помилок і не може вийти за винятком, але технічно ви навіть можете запустити насос повідомлення всередині. Перелік корисних речей, які ви можете зробити всередині, дивіться в іншому моєму дописі .
Зокрема, зауважте, що std :: термінат вважається обробником винятків у контекстах, де std :: термінал викликається через викинуте виняток, який не можна було обробити, і ви можете перевірити, що було винятком, і перевірити його за допомогою C ++ 11, використовуючи std :: rethrow_exception та std :: current_exception. Це все в моєму пості .