c++ - 模板类初始化与模板函数初始化
问题描述
我试图围绕模板专业化在类和函数之间的不同之处展开思考。
在模板类方面,这里有一段编译代码(c++17, gcc10.2):
template<typename T>
class Student {
public:
T num;
};
auto main() -> int {
Student<int> *t;
t->num =5;
在模板函数方面,这里有一段编译代码(c++17,gcc 10.2):
template<typename T>
T fib(T num) {
if (num == 1) return 1;
else if (num == 0) return 0;
else return fib(num-1) + fib(num-2);
}
auto main() -> int {
std::cout << fib(5);
return 0;
}
我的问题是:为什么我应该传入模板类型参数来实例化main中的模板类,而我不必为模板函数做同样的事情?(现在,忽略我使用了指向模板类的指针。即使类被实例化,这个问题仍然有效。)
重新表述这个问题,我试图理解为什么<int>
在类的主体中需要它才能编译,而编译器会自动推断模板类型,就像<int>
模板函数的情况一样。
我知道模板函数在编译时提供了隐式实例化(来自引用)。但是,是什么阻止了编译器对示例代码中的类进行隐式实例化。我相信所有必要的信息在编译时都可用(如果我在这里错了,请纠正我)。
我一直提到的来源:
https://en.cppreference.com/w/cpp/language/class_template
https://docs.microsoft.com/en-us/cpp/cpp/explicit-instantiation?view=vs-2019
解决方案
推荐阅读
- html - 隐藏溢出动画反映div
- java - 删除时未找到 GTT 行,但在插入时找到
- javascript - JSX 中的字符串插值(React)
- django - 未找到关键字参数“{'pk': ''}' 的“date_detail”的反向。尝试了 1 种模式:['date/(?P
[0-9]+)$'] - react-native - 运行在不同端口上的 Docker localhost 和 React Native Metro 服务器可以通信吗?
- eigen3 - 将返回变量写入外部数据
- sql - 如何在mssql服务器中传递参数,中间有斜线
- r - 整洁的评估:如何在依赖 %>% 管道的自定义函数中使用 dplyr::na_if 作为可选参数
- javascript - 不同网页的 ID 值相同
- python - 如何在迭代时同时达到两个变量的某个值?