有些情況下,編譯器會(huì)創(chuàng)建臨時(shí)的無(wú)名計(jì)算機(jī)對(duì)象。為一個(gè)類編寫全局operator+之后,可以將這個(gè)類的對(duì)象和其他類型進(jìn)行加法運(yùn)算,只要其他類型可以轉(zhuǎn)換為這個(gè)類的對(duì)象即可。
第一個(gè)執(zhí)行加法的代碼通過(guò)參數(shù)創(chuàng)建了一個(gè)臨時(shí)SpreadsheetCell對(duì)象;然后將myCell和臨時(shí)對(duì)象作為參數(shù)調(diào)用operator+。結(jié)果保存在aThirdCell時(shí)。第二個(gè)執(zhí)行加法的代碼做了同樣的事情,只不過(guò)必須強(qiáng)制轉(zhuǎn)換為double,才能調(diào)用SpreadsheetCell的double構(gòu)造函數(shù)。
這個(gè)例子中的重點(diǎn)是:編譯器生成了代碼,為每個(gè)相加代碼行創(chuàng)建了一個(gè)額外的無(wú)名的SpreadsheetCell對(duì)象。該對(duì)象必須調(diào)用其構(gòu)造函數(shù)和析構(gòu)造和銷毀。如果還感到懷疑,可以在構(gòu)造函數(shù)和析構(gòu)函數(shù)中插入cout語(yǔ)句,觀察打印輸出。
一般情況下,每當(dāng)代碼需要在較大的表達(dá)式中將一個(gè)類型的變量轉(zhuǎn)換為另一個(gè)類型時(shí),編譯器都會(huì)構(gòu)造臨時(shí)計(jì)算機(jī)對(duì)象。此規(guī)則主要適用于函數(shù)調(diào)用。
編譯器會(huì)使用double構(gòu)造函數(shù)從構(gòu)造一個(gè)鏈?zhǔn)降腟preadsheetCell對(duì)象,然后把這個(gè)對(duì)象傳入doSomethingO。注意,如果把const從s參數(shù)移除,那么再也不能通過(guò)常量調(diào)用doSomethingO,而是必須傳入變量。
一般來(lái)說(shuō),應(yīng)該避免迫使編譯器構(gòu)造臨時(shí)對(duì)象的情況。盡管有時(shí)這是不可避免的,但是至少應(yīng)該意識(shí)到這項(xiàng)“特性”的存在,這樣才不會(huì)為實(shí)際性能額分析結(jié)果而感到驚訝。
編譯器還會(huì)使用移動(dòng)語(yǔ)義使臨時(shí)對(duì)象的效果更高。這是要在類中添加移動(dòng)語(yǔ)義的另一個(gè)原因。
★關(guān)于WorkWin公司電腦監(jiān)控軟件★
WorkWin的使命是打造Work用途的Windows 電腦系統(tǒng),有效規(guī)范員工上網(wǎng)行為,讓老板知道員工每天在做什么(監(jiān)控包括屏幕、上網(wǎng)在內(nèi)的一舉一動(dòng)),限制員工不能做什么(禁止網(wǎng)購(gòu)、游戲、優(yōu)盤等)。
WorkWin基于純軟件設(shè)計(jì),非常容易使用,無(wú)需添加或改動(dòng)任何硬件,使用一臺(tái)管理機(jī)監(jiān)控全部員工機(jī)電腦。歷經(jīng)南京網(wǎng)亞十余年精心打造,此時(shí)此刻每天都有成千上萬(wàn)企業(yè)電腦正在運(yùn)行WorkWin,選擇WorkWin選擇“贏”。
WorkWin監(jiān)控首頁(yè) 短視頻講解 下載免費(fèi)試用版
版權(quán)所有,南京網(wǎng)亞計(jì)算機(jī)有限公司 。本文鏈接地址: 避免創(chuàng)建臨時(shí)計(jì)算機(jī)對(duì)象