2013-04-11 119 views
10

當出口(0)用於從程序退出,用於局部 析構函數作用域非靜態對象不被調用。但是,如果使用返回0,則會調用 。請注意,即使調用exit(),也會清除靜態對象 。出口(0)與返回0

這個邏輯背後應該有一些原因。我只是想知道它是什麼?謝謝。

+0

這並不是與上面引用的問題完全相同的問題。他顯然熟悉所引用問題的答案('exit'不稱爲本地析構函數,他在問爲什麼。 – 2013-04-11 09:57:24

+0

@JamesKanze好吧,我們在這個問題上有點太快了,投票重新打開這個問題,取消了downvote。 – Jean 2013-04-11 09:58:24

+0

即使鏈接問題中的接受答案給出了一個提示(「exit()不返回」),但我同意它肯定不是重複的,這是一個完全不同的問題。 – Damon 2013-04-11 10:11:28

回答

8

exit(0)的情況下,您正在調用一個函數。如果 您正在調用函數,則您不希望調用局部變量的析構函數。而編譯器並不知道, 先驗,有什麼特別的關於exit(0)

實際上,這個基本原理實際上只適用於C++之前的 例外。該標準可重新定義exit()以拋出 實現定義的異常與參數,並指定 對main的調用包裝在try塊中,該塊捕獲 此異常,並將返回碼傳遞迴系統。 這意味着exit在C和C++中有完全不同的 語義;但是,無論如何,在委員會之前並沒有提出 的建議來做出這個改變。