freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

c高效程序設(shè)計(jì)word版(編輯修改稿)

2025-06-10 20:23 本頁(yè)面
 

【文章內(nèi)容簡(jiǎn)介】 定義放進(jìn)類定義中,編譯器會(huì)自動(dòng)的把它看成 inline 函數(shù)。如果一個(gè)類的所有函數(shù)都應(yīng)該是 inline 的,那么我就把整個(gè)類定義及實(shí)現(xiàn)都寫進(jìn)頭文件中。我建議你只在真正迫切的需要提高運(yùn)行速度時(shí)才這樣做,當(dāng)然,你也不在意太多的人 share 你的代碼。 第三節(jié)搭乘類高速列車 設(shè)計(jì)執(zhí)行速度快的類是 C++程序設(shè)計(jì)的關(guān)鍵。我用一個(gè) 3d向量類來說明這個(gè)問 題 (這在我的工作中是很常見的類 )。事實(shí)上,就在前幾個(gè)星期,我剛剛完成了一個(gè)向量類。在編寫這個(gè)類的一個(gè)月里,我犯下了太多錯(cuò)誤。 一個(gè)向量類是必須的,因?yàn)楣ぷ髦杏写罅康南蛄繑?shù)學(xué)運(yùn)算,顯然每次都要反復(fù)書寫相同的內(nèi)容。如果你想提高編碼效率,同時(shí)又不想犧牲代碼運(yùn)行速度,那么就要編寫一個(gè)向量類,我的這一個(gè)叫作 CVector3f(3f 的意思是三個(gè) float數(shù)據(jù) )。為了提高代碼的可讀性和可維護(hù)性,我希望利用 C++偉大的特性之一 運(yùn)算符重載 (operator overloading)實(shí)現(xiàn)一些運(yùn)算符函數(shù) (+, , *)。 在最 初的設(shè)計(jì)中,我很快的實(shí)現(xiàn)了一個(gè)構(gòu)造函數(shù)、一個(gè)拷貝構(gòu)造函數(shù)、一個(gè)析構(gòu)函數(shù)以及上面提到的那三個(gè)運(yùn)算符。設(shè)計(jì)過程中,我沒有特別考慮效率的問題,也沒有使用 inline 函數(shù),只是簡(jiǎn)單的把函數(shù)聲明放入頭文件,把函數(shù)實(shí)現(xiàn)放入 .cpp 文件中。 下一步是讓它跑得更快。我做的第一件事是在頭文件中將所有成員函數(shù)聲明為 inline 函數(shù)。如果編譯器真的將它們處理成 inline 函數(shù),那么我們就可以節(jié)省下函數(shù)調(diào)用的額外開銷。對(duì)于我的向量類中的那些小函數(shù)來說,執(zhí)行速度有了顯著的提升,不過對(duì)于那些較大的函數(shù)來說,這樣做可能不會(huì)有明顯的效果。 我想到的第二件事是:我們真的需要析構(gòu)函數(shù)嗎 ?正常情況下編譯器會(huì)為我們生成一個(gè)空的析構(gòu)函數(shù),通常它會(huì)比我們寫的析構(gòu)函數(shù)效率更高。在我們的向量類中,并沒有什么東西需要析構(gòu),那么為什么還要浪費(fèi)時(shí)間 ? 運(yùn)算符也可以跑得更快。先前的運(yùn)算符函數(shù)大致如下: CVector3f operator+(CVector3f v) { CVector3f returnVector; =m_x+; =m_y+; =m_z+; return returnVector; } 這段代碼隱藏著眾多的多余代碼,著實(shí)令人煩惱。我們來仔細(xì)看看這段代碼,代碼的第一行聲明并構(gòu)造了一個(gè)臨時(shí)變量。這就是說,這個(gè)對(duì)象的默認(rèn)構(gòu)造函數(shù)被調(diào)用,但是我們并不需要初始化它,因?yàn)槲覀儗⒁o它賦一個(gè)全新的值。 代碼結(jié)尾處的 return 語(yǔ)句也是一樣 returnVector 是一個(gè)局部變量,所以不能被馬上用于 return。此時(shí),拷貝構(gòu)造函數(shù)將被調(diào)用,這將會(huì)占用相當(dāng)多的處理器時(shí)間,尤其對(duì)于這樣的小函數(shù)更是如此。另一個(gè)隱藏的更深的家伙是傳遞到函數(shù)的參數(shù)。這個(gè)參數(shù)同樣是一個(gè)實(shí)參的拷貝,于是更多的內(nèi)存被占用,更多的拷貝構(gòu)造函數(shù)被調(diào)用。如果我們編寫一個(gè)新的構(gòu)造函數(shù) 它接受 x、 y、z三個(gè)參數(shù),并且這樣使用它: CVector3f operator+(const CVector3famp。v)const { return CVector3f(m_x+,m_y+,m_z+) } 那又會(huì)怎么樣呢 ? 這樣做將會(huì)去掉兩個(gè)拷貝構(gòu)造函數(shù)的調(diào)用,進(jìn)步很大,不是嗎 ?注意我為這個(gè)函數(shù)加上了 const 關(guān)鍵字。這樣做不是出于速度方面的考慮,而是為了增加代碼的安全性。另一點(diǎn)要指出的是 (涉及到編譯器的內(nèi)部實(shí)現(xiàn) ),我所編寫的這個(gè)函數(shù)允許編譯器更容易的進(jìn)行它自己的代碼優(yōu)化。這個(gè)函數(shù)中幾乎所有內(nèi)容都是很清楚的,不需要什么前提條件,因而它是一個(gè)很好的 inline 候選函數(shù),編譯器還可能會(huì)對(duì)它進(jìn)行一些其它的優(yōu)化,如 返回值優(yōu)化 (參見本文結(jié)尾 處的參考文獻(xiàn) )。 本節(jié)我想要說明的主要問題是,在
點(diǎn)擊復(fù)制文檔內(nèi)容
醫(yī)療健康相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1