2017-03-20 35 views
-7

我在一次採訪中被問到了這個問題,但我根本沒有線索:爲什麼ArrayIndexOutOfBound異常可以在Java中被捕獲,但是C++程序崩潰呢?

爲什麼即使經過如此多的更新之後,C++中還沒有包含數組超出範圍異常?

+2

你讀過這個:https://stackoverflow.com/questions/1239938/accessing-an-array-out-of-bounds-gives-no-error-why – AntonH

+3

因爲Java沒有邊界檢查,而C++沒有,至少在我使用C++時使用的編譯器中不會默認。 IIRC,一些C++編譯器可以選擇將邊界檢查(及其相關開銷)添加到編譯後的代碼中。 –

+0

異常昂貴。除非用戶要求,否則C++的座右銘是不要使用昂貴的東西。所以如果你想要所有額外的開銷,你可以使用'std :: vector' /'std :: array',它是'at'函數,它會執行邊界檢查並會拋出異常。 – NathanOliver

回答

3

由於在面試中你被問到了這個問題,面試官可能試圖獲得一些關於你對C++設計原理理解的知識。

在這種情況下,面試官希望討論的原則是,在C++中,您不會爲您沒有明確要求的事情支付費用。雖然邊界檢查在CPU方面可能非常便宜,但它不是免費的。在語言層面實現它會讓你付出你沒有明確要求的東西,從而違反了C++基本設計原則之一。

相關問題