模板实例化如何不会导致链接错误

我知道以下代码会导致链接错误:

//first.cpp
void test(){
    //random code
}

//second.cpp
void test(){
    //random code
}

所以让我们说我们有这个函数模板:

template<typename T>
T test(){
    //random code
}

并且正在这样做:

//first.cpp
...
test<void>();

//second.cpp
...
test<void>();

所以我理解编译器如何工作的方式是它只关心每个文件,所以它只关心test<void>()必须有一个定义,因此它会创建一个。同样的事情也适用,second.cpp那么为什么我们在后期有两个定义时不会收到链接器错误test<void>。 (我认为这应该与第一个示例相同,其中两个void test()函数在单独的文件中导致链接错误)

如果这是重复的我很抱歉我真的不知道如何搜索这个。

以上是模板实例化如何不会导致链接错误的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>