最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(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ó)家法律
易门县| 明星| 巴彦县| 平武县| 十堰市| 玉田县| 隆安县| 霍林郭勒市| 左贡县| 虹口区| 营口市| 海伦市| 集安市| 麻江县| 兴国县| 桐庐县| 苍山县| 呼玛县| 长顺县| 顺昌县| 永吉县| 乌拉特后旗| 濮阳市| 丹阳市| 荣成市| 峨眉山市| 东兴市| 威宁| 吉安市| 杂多县| 兴山县| 凤翔县| 张家港市| 虹口区| 泗阳县| 疏勒县| 西宁市| 福州市| 横山县| 寿宁县| 广平县|