C++ 模板,即使没有显式类实例化,仍然能够使用类方法

标签 c++ templates instantiation

我有一个如下所示的模板类。

#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/

相关文章:

c++ - 给出不精确答案的递归Karatsuba算法

c++ - 数据成员的编译时多态性

c++ - 模板类和预处理器指令

javascript - Javascript 对象实例化大小和方法的性能差异很大

c++ - 正确地将 B 转换为 MB,或者完全错误

c++ - 从 boost multi_index 数组中 move 元素

c++ - 如果 (a) b = c, d = e, return; 为什么这将无法编译?

c++ - 将模板(没有规范)传递给 std::thread() 会出现错误:<未解析的重载函数类型>匹配错误

C++:对模板使用 "extern"关键字是否有意义?

c# - 在现有模型对象之上实例化 ViewModels 和 Views