标准说模板名称有external linkage。
我的问题是:&#34; 当我在两个.cpp文件中声明相同的模板并将这些文件一起编译时,为什么没有链接器错误?&#34; < / p>
全局函数名称具有模板名称等外部链接。这就是为什么我建议他们应该有类似的行为。但是对于函数来说没什么奇怪的,链接器会产生错误,但是对于模板而言,没有错误。
temp_1.cpp
#include <iostream>
// error because of external linkage
// void eq_f(){}
template<class T>
void my_func() {
std::cout << "1!";
}
temp_2.cpp
#include <iostream>
// external linkage
// void eq_f(){}
template<class T>
void my_func() {
std::cout << "2!";
}
int main() {
my_func<int>();
return 0;
}
命令:
clang++ temp_1.cpp temp_2.cpp -std=c++17