C++确定对象被使用前已先被初始化
確定對象被使用前已先被初始化
- 讀取未初始化對象的后果
- 按對象的類型劃分
- 按對象的作用域與生命周期劃分
讀取未初始化對象的后果
讀取未被初始化的值會導(dǎo)致不明確的行為。在某些平臺上,僅僅只是讀取未初始化的值就可能讓程序終止,更可能的情況是讀入一些“半隨機(jī)”bits,污染了正在進(jìn)行讀取動(dòng)作的那個(gè)對象,最終導(dǎo)致不可預(yù)知的程序行為,以及許多令人不愉快的調(diào)試過程
按對象的類型劃分
?對于內(nèi)置類型的對象:永遠(yuǎn)在使用前初始化
?類類型的對象:初始化責(zé)任落在構(gòu)造函數(shù)身上
–效率上的問題:
?類類型成員的初始化動(dòng)作發(fā)生在構(gòu)造函數(shù)本體之前。比起先調(diào)用default構(gòu)造函數(shù)然后再調(diào)用copy assignment操作符,單只調(diào)用一次copy構(gòu)造函數(shù)比較高效。因此,善用初始化列表有助于提升效率
?內(nèi)置類型成員的初始化不一定發(fā)生在賦值動(dòng)作的的時(shí)間點(diǎn)之前 。對于內(nèi)置類型成員,一般為了保持一致也在初始化列表中給出初始值
–初始化順序:成員的初始化順序與類內(nèi)聲明順序相同
按對象的作用域與生命周期劃分
static對象
–non-local static對象:C++對“定義于不同的編譯單元內(nèi)的non-local static對象”的初始化相對次序并無明確定義
global對象
定義于namespace作用域內(nèi)的對象
cl
總結(jié)
以上是生活随笔為你收集整理的C++确定对象被使用前已先被初始化的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c++别让异常逃离析构函数
- 下一篇: u盘启动电脑错误怎么回事啊 U盘启动电脑