在不同的cpp檔案中用同樣類例項化某個模板函式那麼是會產生多個函式的定義嗎?

時間 2021-06-23 22:44:16

1樓:

測試一下就行了:

template.hpp

template

>intfoo

()1.cpp

#include

"template.hpp"

intf1

()g++ -c 1.cpp -o 1.o

nm | c++filt

0000000000000000 T f1()

0000000000000000 W int foo<42>()

2.cpp

#include "template.hpp"

int f1();

int f2()

int main()

g++ -c 2.cpp -o 2.o

nm | c++filt

000000000000000b T mainU f1()

0000000000000000 T f2()

0000000000000000 W int foo<42>()

最後結果

g++ 1.o 2.o -o main

nm main | c++filt

//省略一些無關輸出

0000000000400587 T main

00000000004004e0 t register_tm_clones

0000000000400470 T _start

0000000000600a28 D __TMC_END__

0000000000400566 T f1()

000000000040057c T f2()

0000000000400571 W int foo<42>()

可以看到,在1.o中與2.o中都分別包含了乙份例項化後的int foo<42>。

但在最後的可執行檔案中只有乙份int foo<42>。注意int foo<42>前的W標記:

34;W"

34;w" The symbol is a weak symbol that has not been specifically tagged as a weak object symbol. When a weak defined symbol is linked with a normal defined symbol, the normal defined symbol is used with no error. When a weak undefined symbol is linked and the symbol is not defined, the value of the symbol is determined in a system-specific manner without error.

On some systems, uppercase indicates that a default value has been specified.

Rule 3: Given multiple weak symbols, choose any of the weak sy

mbols.

京劇中有沒有在不同折中用不同行當表演的同一角色?

再補充一下。謝瑤環 其實開始想補充的不是這出來著。但是忘了是哪齣了。補充一下啊!不知道怎麼理解用不同行當表演。如果不同行當表演 不同 行當 表演,那麼就是我原答案 分割線下 的框架。如果不同行當表演 不同行當 表演 那麼別的答案說的木蘭從軍一類的戲還真是這樣。辛安驛 可能也算?小小分割線 這個題目問...

在人類發展不同階段,同樣處在沒有互通交流的情況下,全球範圍內人類使用器具基本同步,但語言卻千差萬別?

趙二律 上帝創造人類,那時候人類是同一語言,後來覺得人類無所不能,害怕有天做出什麼,便做出了阻礙,讓每塊地方的人需要不通,交流不便。 志為何 語言只是行為的一種表達方式,說白了就是思想,思維的呈現。很簡單雖然語言不同並千差萬別。可是思想思維是相同的。你所想即我所想,就算我們語言不同,我也能了解你餓了...

生物類和醫學類的學生如何應對自己在處死實驗動物後的罪惡感?

我做實驗的時候沒感覺,有一天我突然感覺生命很脆弱,就像哪些動物。可能上一秒還在很有力的掙扎,下一秒就癱在解剖盤上,然後乙個生命沒有了。我不知道該怎麼說這種感覺,罪惡吧沒恁深,坦然吧,我又做不到 我想,動物之於人類本身是沒有權利的,保護動物實際上是為了保護人的同理心。大可不必懷有罪惡感,但人是感性的,...