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 str 的問題

the function c str returns a const pointer to a regular c string,identical to the current string.the returned string is null terminated.c str函式的返回值是co...

C中的屬性問題

屬性的使用和引數基本是一樣的,set方法就是定義這個屬性可以寫,get方法定義這個屬性可以讀。其他在使用的時候和引數基本一致。屬性的用途就是簡化對引數的讀寫控制已經增加私有變數的隱祕程度。例 private int age public int age get 在使用的時候如果需要賦值,可以直接進行...

c語言陣列中括號的問題,C語言陣列中括號的問題

函式形參中int sorce其實相當於int sorce,所以是指標而不是陣列,不信你可以在函式內改變形參sorce的值,而陣列是不可以重新賦值的。c 是不接受陣列作形參的。 可以在定義陣列的時候直接賦值,那樣就可以省略了列如 int a 陣列定義時必須確定長度,系統才知道給它分配多少記憶體。陣列作...