第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

C++ template問(wèn)題?

C++ template問(wèn)題?

C++
繁華開(kāi)滿天機(jī) 2019-05-10 11:07:21
C++ template問(wèn)題
查看完整描述

3 回答

?
神不在的星期二

TA貢獻(xiàn)1963條經(jīng)驗(yàn) 獲得超6個(gè)贊

template <class Type>
struct listNode
{
Type number;
listNode<Type> *link;
}
因?yàn)槟愕膌istNode是一個(gè)模版,只有給出具體的類型參數(shù),編譯器才能推導(dǎo)出具體的代碼。
你在使用中struct listNode<int> i;那么就得到了一個(gè)保存整數(shù)類型的節(jié)點(diǎn),
struct listNode<float> f; 就得到了一個(gè)保存浮點(diǎn)類型的節(jié)點(diǎn)f。如果你不給出類型,編譯器怎么知道生成什么樣子的代碼呢。

改寫一般是這樣子的

template <class _Ty>
class LinkedList
{
public:
struct listNode
{
_Ty number;
listNode<_Ty> *link;
};
typedef typename listNode<_Ty> * listNodePtr;
public:
LinkedList(){;};
void addNode(_Ty node);

......其他方法
}

用的時(shí)候
LinkedList<int> list;
LinkedList<int>::listNode node;
LinkedList<int>::listNodePtr pNode;
list.addNode(node);



查看完整回答
反對(duì) 回復(fù) 2019-05-13
?
DIEA

TA貢獻(xiàn)1820條經(jīng)驗(yàn) 獲得超2個(gè)贊

實(shí)現(xiàn)模板實(shí)例化是編譯器的編譯期行為,編譯期按不同類型參數(shù)實(shí)例化模板,并且目前而言編譯器一般不會(huì)有通用且有效的優(yōu)化行為(因?yàn)槟0逯械念愋蛥?shù)自由度很高,編譯器無(wú)法判斷哪個(gè)類或函數(shù)的模板實(shí)例化版本是不需要的而可以用另一些版本代替)。因此如果調(diào)用的不同類型參數(shù)數(shù)量比較多,的確會(huì)造成很明顯的代碼膨脹導(dǎo)致最終目標(biāo)文件體積明顯增加。如果要減少目標(biāo)文件體積,可以限制調(diào)用的類型參數(shù)的實(shí)例數(shù),例如在不同的類之間盡可能使用繼承而不是直接當(dāng)作相互無(wú)關(guān)的模板類型參數(shù)(不過(guò)這樣可能會(huì)略損失運(yùn)行期性能,尤其是使用虛繼承時(shí);另外面向?qū)ο?/a>范型相對(duì)于泛型而言,運(yùn)行期限制更多,靈活性略差,有時(shí)候可能不得不多寫一些重復(fù)代碼)。
至于函數(shù)調(diào)用是目標(biāo)代碼的運(yùn)行期行為,目標(biāo)代碼已經(jīng)生成好了(由于是本機(jī)代碼,不會(huì)保存類型等元信息),和模板無(wú)關(guān)(模板在編譯早期展開(kāi)后就可以當(dāng)作不存在了)。

查看完整回答
  • 3 回答
  • 0 關(guān)注
  • 787 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)