五月天青色头像情侣网名,国产亚洲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ó)家法律
阿图什市| 宾川县| 台北市| 西峡县| 镇宁| 大名县| 芦溪县| 共和县| 丰镇市| 大安市| 阳春市| 中江县| 得荣县| 绥德县| 洛南县| 南安市| 东海县| 公主岭市| 北辰区| 石河子市| 临夏市| 德江县| 苏尼特左旗| 施秉县| 博罗县| 永泰县| 陵川县| 仁布县| 清远市| 吉林市| 中宁县| 株洲县| 正定县| 荣昌县| 依安县| 灵台县| 青阳县| 扶风县| 绍兴县| 荣成市| 咸阳市|