3 回答

TA貢獻(xiàn)1874條經(jīng)驗(yàn) 獲得超12個(gè)贊
如果不初始化在函數(shù)內(nèi)部定義的變量,則變量值將保持未定義狀態(tài)。
這是真的。
這意味著元素將采用先前駐留在內(nèi)存中該位置的任何值。
這不是。
有時(shí)在實(shí)踐中會(huì)發(fā)生這種情況,您應(yīng)該意識(shí)到對(duì)于程序的任何給定運(yùn)行,獲取零或不獲取零都完全適合此理論。
從理論上講,如果需要,編譯器實(shí)際上可以為該整數(shù)分配一個(gè)隨機(jī)初始值,因此嘗試對(duì)此進(jìn)行合理化完全沒(méi)有意義。但是,讓我們繼續(xù)前進(jìn),就好像我們假設(shè)“該元素采用先前位于內(nèi)存中該位置的任何值”一樣…
怎么可能不是零(我假設(shè)默認(rèn)的可用內(nèi)存值為零)?
好吧,這就是您假設(shè)時(shí)發(fā)生的情況。:)

TA貢獻(xiàn)1811條經(jīng)驗(yàn) 獲得超5個(gè)贊
該代碼調(diào)用未定義行為(UB),因?yàn)槲闯跏蓟褂昧酥羔槨?/p>
使用警告標(biāo)志時(shí),編譯器應(yīng)發(fā)出警告,-Wall例如:
warning: 'i' is used uninitialized in this function [-Wuninitialized]
cout << i;
^
碰巧的是,在您的系統(tǒng)上,此運(yùn)行時(shí)它的值為0。這意味著該變量被分配給的垃圾值恰好為0,因?yàn)槟抢锏膬?nèi)存剩余表明了這一點(diǎn)。
但是,請(qǐng)注意,內(nèi)核零點(diǎn)相對(duì)經(jīng)常出現(xiàn)。這意味著我可以得到零作為系統(tǒng)輸出是很常見(jiàn)的,但是并不能保證也不應(yīng)該將其視為承諾。
- 3 回答
- 0 關(guān)注
- 649 瀏覽
添加回答
舉報(bào)