我有一个如下所示的模板类。
#include <iostream>
using namespace std;
template <typename T> class Test
{
public:
void foo(){cout << "foo" <<endl;}
void goo(){cout << "goo" <<endl;}
};
//template class Test<int>; // foo, goo instantiation
template void Test<int>::foo(); //foo instantiation.
int main()
{
Test<int> t1;
t1.goo();
}
编译程序集时,即使其中只存在 foo 符号,但上面的 main 执行良好,没有任何错误,运行正常。我想知道它的执行效果如何。
我对模板代码实例化的理解是生成实际代码。 所以上面的预期只是生成了 foo 的实际代码,但事实并非如此。
最佳答案
对于模板化类,编译器仅实例化您实际使用的方法。
“goo
”方法可能是内联的(您可以通过手动检查来检查),而“foo
”方法可能只是因为您引用它而生成。
关于C++ 模板,即使没有显式类实例化,仍然能够使用类方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66181711/