【发布时间】:2011-12-09 16:19:45
【问题描述】:
我现在正在学习函数模板,我想研究一下函数模板实例化的一些规则。所以我写了以下代码:
#include <iostream>
template <typename>
int check(int x) {
return x * 2;
}
int main() {
std::cout << check<double>(10) << std::endl; // #1
std::cout << check<>(10) << std::endl; // #2
std::cout << check(10) << std::endl; // #3
return 0;
}
#1、#2 和#3 行并没有一起编译,每次尝试我只留下其中一个并注释其余部分。 因此,当 #1 启用时,我没有编译错误,并且打印了正确的答案“20”。据我了解, "check" 调用模板实例化机制,因此真正创建了 "int check(int)" 函数(模板参数的类型不没有任何影响)。 启用#3 时,出现编译错误"error: no matching function for call to 'check(int)'",这是合理的,因为我正在尝试调用" check(int)" 函数不存在。我的问题是关于 #2 案例:在这种情况下,我得到了相同的 “错误:没有匹配函数调用'check(int)'”。不应该调用 "check(10)" 触发模板实例化机制吗?
【问题讨论】:
-
"不应该调用"check(10)" 触发模板实例化机制吗?" 你的问题的答案是:用什么参数?
标签: c++ templates function instantiation overloading