国产亚洲精品福利在线无卡一,国产精久久一区二区三区,亚洲精品无码国模,精品久久久久久无码专区不卡

當(dāng)前位置: 首頁 > news >正文

dw如何用表格做網(wǎng)站深圳網(wǎng)站設(shè)計(jì)知名樂云seo

dw如何用表格做網(wǎng)站,深圳網(wǎng)站設(shè)計(jì)知名樂云seo,大連網(wǎng)站建設(shè)服務(wù)公司,有阿里云主機(jī)管理平臺如何自己做網(wǎng)站條款 44:將與參數(shù)無關(guān)的代碼抽離模板 模板可以節(jié)省時(shí)間和避免代碼重復(fù),編譯器會為填入的每個(gè)不同模板參數(shù)具現(xiàn)化出一份對應(yīng)的代碼,但長此以外,可能會造成代碼膨脹(code bloat),生成浮夸的二進(jìn)制…

條款 44:將與參數(shù)無關(guān)的代碼抽離模板

模板可以節(jié)省時(shí)間和避免代碼重復(fù),編譯器會為填入的每個(gè)不同模板參數(shù)具現(xiàn)化出一份對應(yīng)的代碼,但長此以外,可能會造成代碼膨脹(code bloat),生成浮夸的二進(jìn)制目標(biāo)碼。

基于共性和變性分析(commonality and variability analysis)?的方法,我們需要分析模板中重復(fù)使用的部分,將其抽離出模板,以減輕模板具現(xiàn)化帶來的代碼量。

  • 因非類型模板參數(shù)而造成的代碼膨脹,往往可以消除,做法是以函數(shù)參數(shù)或類成員變量替換模板參數(shù)。
  • 因類型模板參數(shù)而造成的代碼膨脹,往往可以降低,做法是讓帶有完全相同二進(jìn)制表述的具現(xiàn)類型共享實(shí)現(xiàn)代碼。

參考以下矩陣類的例子:

template<typename T, std::size_t n>
class SquareMatrix {
public:void Invert();...
private:std::array<T, n * n> data;
};

修改為:

template<typename T>
class SquareMatrixBase {
protected:void Invert(std::size_t matrixSize);...
private:std::array<T, n * n> data;
};template<typename T, std::size_t n>
class SquareMatrix : private SquareMatrixBase<T> {  // private 繼承實(shí)現(xiàn),見條款 39using SquareMatrixBase<T>::Invert;              // 避免掩蓋基類函數(shù),見條款 33public:void Invert() { this->Invert(n); }              // 調(diào)用模板基類函數(shù),見條款 43...
};

Invert并不是我們唯一要使用的矩陣操作函數(shù),而且每次都往基類傳遞矩陣尺寸顯得太過繁瑣,我們可以考慮將數(shù)據(jù)放在派生類中,在基類中儲存指針和矩陣尺寸。修改代碼如下:

template<typename T>
class SquareMatrixBase {
protected:SquareMatrixBase(std::size_t n, T* pMem): size(n), pData(pMem) {}void SetDataPtr(T* ptr) { pData = ptr; }...
private:std::size_t size;T* pData;
};template<typename T, std::size_t n>
class SquareMatrix : private SquareMatrixBase<T> {
public:SquareMatrix() : SquareMatrixBase<T>(n, data.data()) {}...
private:std::array<T, n * n> data;
};

然而這種做法并非永遠(yuǎn)能取得優(yōu)勢,硬是綁著矩陣尺寸的那個(gè)版本,有可能生成比共享版本更佳的代碼。例如在尺寸專屬版中,尺寸是個(gè)編譯期常量,因此可以在編譯期藉由常量的廣傳達(dá)到最優(yōu)化;而在共享版本中,不同大小的矩陣只擁有單一版本的函數(shù),可減少可執(zhí)行文件大小,也就因此降低程序的 working set(在“虛內(nèi)存環(huán)境”下執(zhí)行的進(jìn)程所使用的一組內(nèi)存頁),并強(qiáng)化指令高速緩存區(qū)內(nèi)的引用集中化(locality of reference),這些都可能使程序執(zhí)行得更快速。究竟哪個(gè)版本更佳,只能經(jīng)由具體的測試后決定。

同樣地,上面的代碼也使用到了犧牲封裝性的protected,可能會導(dǎo)致資源管理上的混亂和復(fù)雜,考慮到這些,也許一點(diǎn)點(diǎn)模板代碼的重復(fù)并非不可接受。

條款 45:運(yùn)用成員函數(shù)模板接受所有兼容類型

C++ 視模板類的不同具現(xiàn)體為完全不同的的類型(如果用帶有base-derived關(guān)系的B、D分別具現(xiàn)化同一個(gè)template,產(chǎn)生出來的兩個(gè)具現(xiàn)體并不帶有base-derived關(guān)系),但在泛型編程中,我們可能需要一個(gè)模板類的不同具現(xiàn)體能夠相互類型轉(zhuǎn)換。

考慮設(shè)計(jì)一個(gè)智能指針類,而智能指針需要支持不同類型指針之間的隱式轉(zhuǎn)換(如果可以的話),以及普通指針到智能指針的顯式轉(zhuǎn)換。很顯然,我們需要的是模板拷貝構(gòu)造函數(shù)(成員函數(shù)模板):

template<typename T>
class SmartPtr {
public:template<typename U>SmartPtr(const SmartPtr<U>& other): heldPtr(other.get()) { ... }template<typename U>explicit SmartPtr(U* p): heldPtr(p) { ... }T* get() const { return heldPtr; }...
private:T* heldPtr;
};

使用get獲取原始指針,并將在原始指針之間進(jìn)行類型轉(zhuǎn)換本身提供了一種保障,如果原始指針之間不能隱式轉(zhuǎn)換,那么其對應(yīng)的智能指針之間的隱式轉(zhuǎn)換會造成編譯錯(cuò)誤。

智能指針中的shared_ptr支持所有“兼容的內(nèi)置指針、shared_ptr、auto_ptr和weak_ptr”的構(gòu)造方法;以及上述除weak_ptr外的其它的賦值操作。(auto_ptr未被聲明為const,是因?yàn)楫?dāng)你復(fù)制一個(gè)auto_ptr時(shí),它其實(shí)被改動了)

template<class T>
class shared_ptr
{
public:template<class Y>explicit shared_ptr(Y* p);template<class Y>shared_ptr(shared_ptr<Y> const& r);template<class Y>explicit shared_ptr(weak_ptr<Y> const& r);template<class Y>explicit shared_ptr(auto_ptr<Y> & r);template<class Y>shared_ptr& operator=(shared_ptr<Y> const& r);template<class Y>shared_ptr& operator=(auto<Y> & r);
}

模板構(gòu)造函數(shù)并不會阻止編譯器暗自生成默認(rèn)的構(gòu)造函數(shù),所以如果你想要控制拷貝構(gòu)造的方方面面,你必須同時(shí)聲明泛化拷貝構(gòu)造函數(shù)和普通拷貝構(gòu)造函數(shù),相同規(guī)則也適用于賦值運(yùn)算符:

template<typename T>
class shared_ptr {
public:shared_ptr(shared_ptr const& r);                // 拷貝構(gòu)造函數(shù)template<typename Y>shared_ptr(shared_ptr<Y> const& r);             // 泛化拷貝構(gòu)造函數(shù)shared_ptr& operator=(shared_ptr const& r);     // 拷貝賦值運(yùn)算符template<typename Y>shared_ptr& operator=(shared_ptr<Y> const& r);  // 泛化拷貝賦值運(yùn)算符...
};
http://aloenet.com.cn/news/45965.html

相關(guān)文章:

  • 閘北專業(yè)做網(wǎng)站seo搜索引擎實(shí)訓(xùn)心得體會
  • 簡單模板網(wǎng)站制作時(shí)間百度優(yōu)化是什么意思
  • 武漢網(wǎng)站建設(shè)老牌公司適合推廣的app有哪些
  • 網(wǎng)站建設(shè)代碼生成器重慶seo外包平臺
  • dw軟件做二級連接網(wǎng)站長春網(wǎng)站制作推廣
  • 南京美容網(wǎng)站建設(shè)營銷案例
  • 網(wǎng)站建設(shè)報(bào)價(jià)明細(xì)表指數(shù)分布的分布函數(shù)
  • 福州正規(guī)網(wǎng)站建設(shè)公司報(bào)價(jià)雙灤區(qū)seo整站排名
  • 蕪湖做公司網(wǎng)站網(wǎng)站優(yōu)化排名網(wǎng)站
  • 哪個(gè)教育網(wǎng)站做助理造價(jià)師培訓(xùn)關(guān)鍵詞優(yōu)化排名用哪些軟件比較好
  • 手機(jī)網(wǎng)站推廣怎么做軟文營銷常用的方式
  • 凡科做的網(wǎng)站手機(jī)版目錄搜索引擎有哪些
  • 有什么軟件可以找客戶搜索引擎營銷與seo優(yōu)化
  • 網(wǎng)站admin目錄名怎么改百度運(yùn)營公司
  • 做網(wǎng)站可以用python么谷歌搜索入口365
  • 做網(wǎng)站需要填什么軟文推廣代表平臺
  • 工業(yè)b2b網(wǎng)站建設(shè)網(wǎng)站推廣的目的
  • 閘北區(qū)網(wǎng)站建設(shè)搜索推廣代運(yùn)營
  • 官方網(wǎng)站平臺有哪些百度關(guān)鍵字推廣費(fèi)用
  • 自己做電影網(wǎng)站可以賺錢嗎新媒體運(yùn)營培訓(xùn)班
  • 懶人做圖網(wǎng)站江門seo
  • 國外家譜網(wǎng)站的建設(shè)關(guān)鍵詞排名怎么做上首頁
  • 四川成都最新新聞事件今天深圳谷歌seo推廣
  • 自己的服務(wù)器做網(wǎng)站優(yōu)速網(wǎng)站建設(shè)優(yōu)化seo
  • web app 和網(wǎng)站的區(qū)別企業(yè)郵箱賬號
  • 定制做網(wǎng)站百度網(wǎng)絡(luò)科技有限公司
  • 免費(fèi)做網(wǎng)站的網(wǎng)址有哪些網(wǎng)絡(luò)整合營銷4i原則
  • 微信小網(wǎng)站怎么做百度競價(jià)廣告推廣
  • 盱眙在仕德偉做網(wǎng)站的有幾家如何進(jìn)行品牌營銷
  • 焦作市網(wǎng)站建設(shè)科技推廣方法有哪幾種