C 類模板在何時例項化?

2021-07-08 19:30:37 字數 1441 閱讀 2544

影響中的一道筆試題,總結了下模板類只宣告未定義時,在哪些情況會出現編譯錯誤。

1、直接例項化物件(只是宣告則不會出錯),無論用棧還是new,編譯時都會出錯。

2、函式定義(只是宣告則不會編譯錯誤)中引數或返回值引用例項化該模板物件時,非引用和傳指標,編譯時會出錯。

總結:定義中直接使用類模板的例項模板類而非引用,則在編譯時就會對其實例化,因為本例中該類模板只有宣告沒有定義,所以編譯時就會出錯1/*

*23* lei hu proprietary/confidential. use is subject to license terms.4*/

5#include 

<

iostream

>

6using

namespace

std;78

template 

<

typename t

>

classa;9

10extern

a<

char

>

g; //

ok, just declare.

1112

void

f1(a

<

int>

p) //

error, undefined type 'a'

1316

17template 

<

typename t

>

18void

f2(a

<

t>

p); 

//ok.

1920

void

f3(a

<

int>

&p) 

//ok, reference or pointer.

2124

25template 

<

typename t

>

26void

f4(a

<

t>

p) //

ok, template non-instance.

273031a

<

int>

f5(); 

//ok, just declare function.

3233

a<

int>

f6() 

//error, use of undefined type 'a'

3437

38template 

<

typename t

>39a

<

t>

f7() 

//ok, template non-instance

4043

44void

main()

4549

from: 

spring bean何時例項化

lazy init 在getbean時例項化 2 非lazy的單例bean 容器初始化時例項化 3 prototype等 getbean時例項化 4 小時前 jinnianshilongnian 508013 4160 05 小時前 ddlgyq 30 0000 06 小時前 a123159521 ...

ue4 模板類例項化 關於模板類例項化

模板函式在宣告的時候,其實並不存在,函式位址也就無從談起了,而匯出到 動態鏈結庫不能將模板類匯出,因為沒法生成例項 如果把模板類的宣告和定義都放在標頭檔案中。需要用到模板類的時候,只需要包 含該標頭檔案,然後進行例項化。如果模板類的宣告和定義分別放在標頭檔案和原始檔中。當例項化的時候,只包含標頭檔案...

C 模板例項化

例項化 乙個通過使用具體值替換模板引數,從模板產生的普通類,函式或者成員函式的過程。特化 就是上述過程最終獲得實體。延遲例項化 當隱式例項化類模板時,同時也例項化了該模板的每個成員宣告,但並沒有例項化相應的定義,然而,存在例外 1.如果類模板包含了乙個匿名的union,那麼該union定義的成員同時...