五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

C++自制心得——類與對(duì)象(連續(xù)構(gòu)造優(yōu)化)

2023-09-12 19:04 作者:這年頭起名可真不容易  | 我要投稿

這是一個(gè)短篇專欄,不會(huì)花太長(zhǎng)時(shí)間。這一章講編譯器對(duì)連續(xù)構(gòu)造過程的優(yōu)化,了解即可。

1. 匿名對(duì)象的有名化

用const&引用接收匿名對(duì)象會(huì)使匿名對(duì)象擁有名字,生命周期延長(zhǎng),與有名對(duì)象相同。

之前沒講這個(gè),現(xiàn)在補(bǔ)上。

2. 優(yōu)化

這是今天的重點(diǎn)

首先,我們來分析下面的代碼

理論上調(diào)用第一個(gè)func函數(shù)需要經(jīng)過構(gòu)造+拷貝構(gòu)造,第二個(gè)func函數(shù)也是如此,但編譯器優(yōu)化后結(jié)果卻并非如此

只有第一個(gè)函數(shù)需要經(jīng)過構(gòu)造+拷貝構(gòu)造,第二個(gè)函數(shù)就沒有拷貝構(gòu)造,這是編譯器優(yōu)化后的結(jié)果,編譯器會(huì)優(yōu)化同一語(yǔ)句中的連續(xù)構(gòu)造+拷貝構(gòu)造過程

同理,對(duì)于第三個(gè)函數(shù)編譯器會(huì)使用1進(jìn)行直接構(gòu)造,而非構(gòu)造+拷貝構(gòu)造

這個(gè)也是優(yōu)化后的結(jié)果

當(dāng)然,這種行為不是C++標(biāo)準(zhǔn)行為,而是編譯器自行決定的結(jié)果,不過鑒于所有新一代編譯器均進(jìn)行類似的優(yōu)化操作,你還是把它當(dāng)成C++特性吧

如果編譯器沒有優(yōu)化,第一個(gè)函數(shù)調(diào)用會(huì)先構(gòu)造aa,用aa拷貝構(gòu)造臨時(shí)對(duì)象,析構(gòu)aa,用臨時(shí)對(duì)象拷貝構(gòu)造a1,析構(gòu)臨時(shí)對(duì)象

第二個(gè)函數(shù)會(huì)先構(gòu)造a2,再構(gòu)造aa,用aa拷貝構(gòu)造臨時(shí)對(duì)象,析構(gòu)aa,用臨時(shí)對(duì)象賦值a2,析構(gòu)臨時(shí)對(duì)象

兩者效率上的差異就是一次拷貝構(gòu)造與構(gòu)造+賦值重載的差別

但是編譯器優(yōu)化了第一個(gè)函數(shù)調(diào)用中產(chǎn)生的臨時(shí)對(duì)象,省掉了一次拷貝構(gòu)造+析構(gòu),整個(gè)調(diào)用過程就變成了這樣:構(gòu)造aa,直接用aa拷貝構(gòu)造a1,析構(gòu)aa

對(duì)于第二個(gè)函數(shù)調(diào)用編譯器就無法優(yōu)化,因?yàn)椴皇沁B續(xù)的構(gòu)造+拷貝構(gòu)造

這段代碼很有意思,如果編譯器不優(yōu)化,整個(gè)調(diào)用過程就會(huì)是構(gòu)造匿名對(duì)象,用匿名對(duì)象拷貝構(gòu)造臨時(shí)對(duì)象,析構(gòu)匿名對(duì)象,用臨時(shí)對(duì)象拷貝構(gòu)造a1,析構(gòu)臨時(shí)對(duì)象

編譯器優(yōu)化后就只剩一個(gè)構(gòu)造了,整個(gè)調(diào)用過程就變成了用缺省值直接構(gòu)造a1,省掉了所有中間步驟

同理,這么返回也是一個(gè)結(jié)果

綜上,建議各位在寫代碼時(shí)盡量采取上述方式節(jié)約構(gòu)造開銷

C++自制心得——類與對(duì)象(連續(xù)構(gòu)造優(yōu)化)的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
合作市| 浦江县| 鸡泽县| 通河县| 叶城县| 泽普县| 军事| 弥勒县| 陆丰市| 建阳市| 镇平县| 武鸣县| 南雄市| 道孚县| 五指山市| 成武县| 阿拉善左旗| 佛教| 云浮市| 永胜县| 涿鹿县| 富锦市| 延长县| 佛学| 南皮县| 台山市| 义马市| 陵水| 舒兰市| 南雄市| 乃东县| 全椒县| 宁安市| 高密市| 乌海市| 金门县| 云林县| 闵行区| 临猗县| 卢氏县| 丹阳市|