3 回答

TA貢獻1982條經(jīng)驗 獲得超2個贊
我們都意識到應(yīng)該初始化指針(和其他POD類型)。
那么問題就變成了“誰應(yīng)該初始化它們”。
那么基本上有兩種方法:
編譯器初始化它們。
開發(fā)人員初始化它們。
我們假設(shè)編譯器初始化了未由開發(fā)人員顯式初始化的任何變量。然后我們遇到這樣的情況:初始化變量是非常重要的,開發(fā)人員在聲明點沒有這樣做的原因是他/她需要執(zhí)行一些操作然后分配。
所以現(xiàn)在我們遇到這樣的情況:編譯器已經(jīng)向代碼添加了一條額外的指令,該指令將變量初始化為NULL,然后添加開發(fā)人員代碼以進行正確的初始化?;蛘咴谄渌麠l件下,變量可能永遠不會被使用。很多C ++開發(fā)人員會在這兩個條件下以這個額外指令為代價來尖叫犯規(guī)。
這不僅僅是時間問題。還有空間。在很多環(huán)境中,兩種資源都非常寶貴,開發(fā)人員也不想放棄。
但是:您可以模擬強制初始化的效果。大多數(shù)編譯器會警告您未初始化的變量。所以我總是將警告級別變?yōu)榭赡艿淖罡呒墑e。然后告訴編譯器將所有警告視為錯誤。在這些條件下,大多數(shù)編譯器將為未初始化但使用的變量生成錯誤,從而阻止生成代碼。

TA貢獻1725條經(jīng)驗 獲得超8個贊
引用TC ++ PL中的Bjarne Stroustrup(特別版第22頁):
功能的實現(xiàn)不應(yīng)對不需要它的程序施加大量開銷。

TA貢獻1828條經(jīng)驗 獲得超6個贊
因為初始化需要時間。在C ++中,你應(yīng)該對任何變量做的第一件事是明確地初始化它:
int * p = & some_int;
要么:
int * p = 0;
要么:
class A { public: A() : p( 0 ) {} // initialise via constructor private: int * p;};
- 3 回答
- 0 關(guān)注
- 852 瀏覽
添加回答
舉報