c 中的template的問題

時間 2021-09-12 00:10:22

1樓:匿名使用者

實現模板例項化是編譯器的編譯期行為,編譯期按不同型別引數例項化模板,並且目前而言編譯器一般不會有通用且有效的優化行為(因為模板中的型別引數自由度很高,編譯器無法判斷哪個類或函式的模板例項化版本是不需要的而可以用另一些版本代替)。因此如果呼叫的不同型別引數數量比較多,的確會造成很明顯的**膨脹導致最終目標檔案體積明顯增加。如果要減少目標檔案體積,可以限制呼叫的型別引數的例項數,例如在不同的類之間儘可能使用繼承而不是直接當作相互無關的模板型別引數(不過這樣可能會略損失執行期效能,尤其是使用虛繼承時;另外物件導向範型相對於泛型而言,執行期限制更多,靈活性略差,有時候可能不得不多寫一些重複**)。

至於函式呼叫是目標**的執行期行為,目標**已經生成好了(由於是本機**,不會儲存型別等元資訊),和模板無關(模板在編譯早期後就可以當作不存在了)。

====

[原創回答團]

2樓:花香人間

編譯時會生成,但一個模板引數只生成一份**,

跟呼叫沒有關係。

3樓:陳學陽

。。。吧template後面那個分號去掉就行了。

如果對您有幫助,請記得采納為滿意答案,謝謝!祝您生活愉快!

vaela

c++中的template是做什麼用的

4樓:

template 模板呀,就是採用型別作引數編出一個類或函式的模子,傳入型別後,就可以得到一大堆你想要的功能幾乎一樣的類和函式了,呵呵

5樓:

c++中模板的宣告和定義的位置一定要小心處理, 否則在連結時會出現"無法解析某某函式或類"的錯誤。

函式模板的一般定義形式:

template < 型別形式參數列 > 返回型別 functionname( 形式參數列 )

說明:⒈ < 型別形式參數列 > 可以包含基本資料型別,也可以包含類型別。若是類型別,則須加字首 class 。

⒉這樣的函式模板定義不是一個實實在在的函式,編譯系統不為其產生任何執行**。該定義只是對函式的描述,表示它每次能單獨處理在型別形式參數列中說明的資料型別。

6樓:匿名使用者

這是c++中支援抽象的一種方式,稱為模板。比如定義一個類point,座標x,y的值的資料型別可能因問題而異,這時可以使用模板機制,將類的宣告中可能出現的資料型別引數化,僅用符號t代表,並在類宣告的前面或每個成員函式的實現程式前面加一條型別引數化語句:

template

程式內部可以直接使用引數t定義相應的變數的資料型別,比如class point

實際使用時,可以用語句

pointa;

建立一個類point的例項,這個例項用整型int來給出x,y的值。

c++ 高手求解:template < int n> 的具體用法與講解? 如果只是講template < typename n> 就不要回答了? 5

7樓:匿名使用者

模板不就是一個公式嗎? 對不?

你說的這種用法就是,只能傳常數

例子template

class aaa;

c++template模板問題

8樓:兔子和小強

array是int型別,array[i]只能做右值,用來表示第i行的首地址,而不能作為左值。

你應該使用指標陣列來處理,即將array宣告成int *型別。

9樓:匿名使用者

你的t沒實現operator=吧

c++ 模板類 後面每個方法前的template 有什麼意義 對每個方法有什麼影響?

10樓:匿名使用者

c++集合了過程式

語言,通用語言,面嚮物件語言的眾多特點。模板是通用語言的特性,模板又叫引數化型別(parametrized types)。

模板的定義。以下是模板定義的一般格式:

template //class 也可以換成typename,後者是新來的。

void swap(any &a,any &b)

利用模板機制可以顯著減少冗餘資訊,能大幅度地節約程式**,進一步提高物件導向程式的可重用性和維護性。

在使用過程中,注意的問題:

(1)在template語句與函式模板定義語句之間不允許有別的語句。

template

int i; // 錯誤,不允許插入別的語句

t max(t x,t y)

(2)模板函式類似於過載函式,只不過它更嚴格一些。函式被過載的時候,在每個函式體內可以執行不同的動作。但同一個函式模板例項化後的所有模板函式都必須執行相同的動作。

例如,下面過載函式就不能用模板函式代替,因為它們所執行的動作是不同的。

void outdate(int i)

(3)在函式模板中允許使用多個型別引數。但是應當注意template定義部分的每個型別引數前必須有關鍵字class(typename)。

#inculde

template

void myfunc(type1 x,type2 y)

void fun(int i,char c)

{max(i,i); // 正確,呼叫max(int,int)

關於C 中類的問題,關於C 中類别範本的問題

include 標頭檔案以 h 結尾 using namespace std template class complex template void complex set t a,t b 類函式在函式體外定義要寫template 類名後要加,下面同此 template void complex ...

c 指標陣列問題,C 中關於指標陣列的問題。

是錯誤的。char cchar count 宣告瞭cchar是有count個元素的陣列,每個元素都是指向char型變數的指標。但cin cchar i 卻試圖給cchar的第二個元素 指標 賦一個鍵盤值 這裡指標還沒有確定指向,是隨機的,它隨機地指向了不能寫入的地方,就要出錯。這裡應該先給指標陣列賦...

c 中的小問題,if a》b t a a b,b t

double 聰 問題1不執行大括號之間的,直接輸出a 問題2a先自增為3再加10 把13賦值給b include int main int i,j,row,col,max a 0 0 for i 0 i 3 i printf d,d,d max,row,col return 0 當然不會直接輸出,...