Guru of the Week 条款01: 变量的初始化
GotW #01 Variable Initialization
著者:Herb Sutter?????
翻譯:kingofark
[聲明]:本文內(nèi)容取自www.gotw.ca網(wǎng)站上的Guru of the Week欄目,其著作權(quán)歸原著者本人所有。譯者kingofark在未經(jīng)原著者本人同意的情況下翻譯本文。本翻譯內(nèi)容僅供自學(xué)和參考用,請(qǐng)所有閱讀過(guò)本文的人不要擅自轉(zhuǎn)載、傳播本翻譯內(nèi)容;下載本翻譯內(nèi)容的人請(qǐng)?jiān)陂喿x瀏覽后,立即刪除其備份。譯者kingofark對(duì)違反上述兩條原則的人不負(fù)任何責(zé)任。特此聲明。
Revision 1.0
Guru of the Week 條款01: 變量的初始化
難度:4 / 10
(想想看,有多少種將變量初始化的方法? 千萬(wàn)要注意那些看上去很像“變量初始化”的東西。)
?
[問(wèn)題]
下列四條語(yǔ)句有什么區(qū)別嗎?
??? SomeType t = u;
??? SomeType t(u);
??? SomeType t();
??? SomeType t;
[解答]
我們按從下往上的順序逐個(gè)考察四條語(yǔ)句:
*?? SomeType t;
??? 變量t被缺省構(gòu)造函數(shù)SomeType::SomeType()初始化。
*?? SomeType t();
??? 這是一個(gè)騙局,因?yàn)檫@條語(yǔ)句看上去很像一個(gè)變量聲明,而實(shí)際上卻是一個(gè)函數(shù)聲明;這個(gè)函數(shù)t沒(méi)有參數(shù)并且返回類型為SomeType。
*?? SomeType t(u);
??? 這是直接初始化。變量t通過(guò)構(gòu)造函數(shù)SomeType::SomeType(u)被初始化。
*??SomeType t = u;
??? 這是拷貝初始化。變量t通過(guò)SomeType的拷貝構(gòu)造函數(shù)(Copy Constructor)被初始化。(注意,這條語(yǔ)句雖然含有“=”,但仍然是一個(gè)初始化操作,而不是一個(gè)賦值操作,因?yàn)樵谶@里,允許使用'='只是為了可以沿用C語(yǔ)言的語(yǔ)法,operator=是不會(huì)被調(diào)用的。)
????[語(yǔ)義學(xué)參考]:如果u恰好也是SomeType類型,那么這條語(yǔ)句與“SomeType t(u);”是等同的,將調(diào)用SomeType的拷貝構(gòu)造函數(shù)(Copy Constructor)。如果u是SomeType以外的其它類型,那么這條語(yǔ)句與“SomeType t(SomeType(u))”是等同的。可以看到,在語(yǔ)句“SomeType t(SomeType(u))”里,u被轉(zhuǎn)換成一個(gè)臨時(shí)的SomeType對(duì)象,而t則是由此拷貝構(gòu)造出來(lái)的。
??? [注意]:在這種情況下,編譯器通常可以(但不是必須要)對(duì)其進(jìn)行優(yōu)化,適當(dāng)?shù)奶幚砜截悩?gòu)造(Copy Construction)操作(一般是省略掉拷貝構(gòu)造過(guò)程)。如果進(jìn)行了優(yōu)化,則一定要保證拷貝構(gòu)造函數(shù)(Copy Constructor)的可達(dá)性。
?
?? [學(xué)習(xí)指導(dǎo)]:?建議總是使用“SomeType t(u)”的形式, 一來(lái)是因?yàn)橹灰梢杂谩?/span>SomeType t = u”的地方也同樣可以它;二來(lái)是因?yàn)樗€有一些其它的優(yōu)點(diǎn),比如支持多個(gè)參數(shù)等。
轉(zhuǎn)載于:https://www.cnblogs.com/snben/archive/2012/08/27/2658939.html
總結(jié)
以上是生活随笔為你收集整理的Guru of the Week 条款01: 变量的初始化的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: checkedListBox使用例子
- 下一篇: 调用GOOGLE语音