Exit (0) vs return 0

Когда выход (0) используется для выхода из программы, деструкторы для локального нестатические объекты с областью не называются. Но деструкторы если используется возврат 0. Обратите внимание, что статические объекты будут очищается, даже если мы вызываем exit().

Должна быть некоторая причина этой логики. я просто хочу знать, что это такое? Спасибо.

Ответ 1

В случае exit( 0 ) вы вызываете функцию. Вы не ожидайте вызова деструкторов локальных переменных, если вы вызываете функцию. И компилятор не знает, a priori, что есть что-то особенное в exit( 0 ).

Фактически, это обоснование действительно применимо только к С++ до исключения. Стандарт может переопределить exit(), чтобы исключение реализации с аргументом и указать что вызов main завернут в блок try, который ловит это исключение, и возвращает код возврата обратно в систему. Это означало бы, что exit имеет совершенно другую семантика в C и на С++; во всяком случае, не было предложение перед комитетом внести это изменение.