日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > c/c++ >内容正文

c/c++

Effective C++ --5 实现

發(fā)布時(shí)間:2025/3/21 c/c++ 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Effective C++ --5 实现 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

上一部分 Effective C++ --4 設(shè)計(jì)與聲明

?

26、盡可能延后變量定義式的出現(xiàn)時(shí)間

?1)這樣可以增加程序的清晰度并改善程序效率。如定義變量后還未使用遇到return或者拋出異常,這樣未使用卻增加了調(diào)用構(gòu)造析構(gòu)函數(shù)的成本。

27、盡量少做轉(zhuǎn)型動(dòng)作

?1)使用c++新式轉(zhuǎn)型,而不要是用舊式轉(zhuǎn)性。有四種新式轉(zhuǎn)型:const_cast<T>()dynamic_cast<T>()reinterpret_cast<T>()static_cast<T>()const_cast將對(duì)象常量性轉(zhuǎn)型;dynamic_cast執(zhí)行安全向下轉(zhuǎn)型;reinterpret_cast執(zhí)行低級(jí)轉(zhuǎn)型;static_cast強(qiáng)迫隱式轉(zhuǎn)型。

?2)盡量避免轉(zhuǎn)型,特別是在注重效率的代碼中避免dynamic_cast

?3)如果轉(zhuǎn)型是必要的,試著將它隱藏于某個(gè)函數(shù)背后。客戶隨后可以調(diào)用該函數(shù),而不需將轉(zhuǎn)型放進(jìn)他們自己的代碼內(nèi)。

28、避免返回handles指向?qū)ο髢?nèi)部

?1handles(號(hào)碼牌,用來(lái)取得某個(gè)對(duì)象),reference、指針和迭代器都是,而返回一個(gè)代表對(duì)象內(nèi)部數(shù)據(jù)的handle,但會(huì)降低對(duì)象封裝性。

?2)避免返回handles指向?qū)ο髢?nèi)部。遵守這個(gè)條款可以增加封裝性,幫助const成員函數(shù)的行為像個(gè)const,并將發(fā)生虛掉號(hào)碼牌的可能性降低。

29、為異常安全而努力是值得的

?1)異常安全函數(shù)即使發(fā)生異常也不會(huì)泄露資源或允許任何數(shù)據(jù)結(jié)構(gòu)敗壞。可以提供的保證分為三種:基本承諾、強(qiáng)烈保證和不拋擲保證。基本保證,保證異常被拋出后所有對(duì)象都處于前后一致的狀態(tài),但是現(xiàn)實(shí)狀態(tài)不能保證;強(qiáng)烈保證,如果異常拋出,程序狀態(tài)不改變,如果成功,則完全成功,如果失敗就回到調(diào)用函數(shù)之前的狀態(tài);不拋擲異常,總能完成原來(lái)承諾的功能。

?2)強(qiáng)烈保證,往往能夠以copy-and-swap實(shí)現(xiàn)出來(lái),但是并非對(duì)所有函數(shù)都可實(shí)現(xiàn)或者具備現(xiàn)實(shí)意義。Copy-and-swap原則:為打算修改的對(duì)象(原件)做出一份副本,然后在那份副本上做一切必要修改,若有任何修改動(dòng)作拋出異常,原對(duì)象仍然保持為改變狀態(tài);待所有改變都成功后,再將修改過(guò)的那個(gè)副本和原對(duì)象在一個(gè)不拋出異常的操作中置換。

3)函數(shù)提供的異常安全保證通常最高只等于其調(diào)用之各個(gè)函數(shù)的異常安全保證中的最弱者。

30、透徹理解inlining的里里外外

?1)將大多數(shù)inline限制在小型、被頻繁調(diào)用的函數(shù)身上。

?2)不要太熱衷inline函數(shù),inline函數(shù)是對(duì)每個(gè)函數(shù)都以函數(shù)本體替換之,會(huì)造成代碼膨脹,也會(huì)導(dǎo)致額外的換頁(yè)行為,降低指令高速緩存裝置的擊中率,以及伴隨而來(lái)的效率損失。

?3inline只是對(duì)編譯器的一個(gè)申請(qǐng),不是強(qiáng)制命令。這項(xiàng)申請(qǐng)可以隱喻也可以明確提出。如果成員函數(shù)或者friend函數(shù)定義于class內(nèi),則被隱喻為inlinetemplate的具現(xiàn)化與inlining無(wú)關(guān),如果不是具現(xiàn)的每個(gè)函數(shù)都是inline,則應(yīng)避免將template聲明為inline;大部分編譯器拒絕將太過(guò)復(fù)雜的函數(shù)inline,對(duì)所有對(duì)virtual函數(shù)的調(diào)用也都會(huì)使inlining落空。

31、將文件間的編譯依存關(guān)系降至最低

?1)支持“編譯依存性最小化”的一般構(gòu)想是:相依于聲明式,不要相依于定義式。基于此構(gòu)想的兩個(gè)手段是Handle classesinterface classes

?2pimpl idiom手法(pimpl -- pointer to implementation),將所有“隸屬對(duì)象的數(shù)據(jù)”從原對(duì)象放進(jìn)另一個(gè)對(duì)象,然后賦予對(duì)象一個(gè)指針,指向那個(gè)所謂的實(shí)現(xiàn)對(duì)象。

?3)程序庫(kù)頭文件應(yīng)該以“完全且僅有聲明式”的形式存在,不管有無(wú)template都適用。

總結(jié)

以上是生活随笔為你收集整理的Effective C++ --5 实现的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。