五月天青色头像情侣网名,国产亚洲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ó)家法律
家居| 神农架林区| 尚义县| 景泰县| 安顺市| 南和县| 正安县| 阜平县| 即墨市| 荃湾区| 昌宁县| 保山市| 监利县| 泸溪县| 炎陵县| 竹溪县| 元朗区| 永泰县| 弋阳县| 潞西市| 修文县| 泰兴市| 布尔津县| 游戏| 眉山市| 奉新县| 泰和县| 平乐县| 沧州市| 苍梧县| 宝丰县| 西林县| 定州市| 巧家县| 郑州市| 太和县| 西充县| 鹤壁市| 庆元县| 石首市| 乐至县|