模板实例化如何不会导致链接错误
我知道以下代码会导致链接错误:
//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()函数在单独的文件中导致链接错误)
如果这是重复的我很抱歉我真的不知道如何搜索这个。