基本模板 C++
Basic Templates C++
在阅读有关模板的内容时,我遇到了以下代码:
template<class T>
void f(T x, T y) {
cout << "template" <<endl;
}
void f(int w, int z) {
cout << "Non template" <<endl;
}
int main() {
f(1,2);
f('a','b');
f(1,'b');
}
书上说这段代码的输出是:
Non template
Template
Non template
最后一行 f(1,'b') 让我感到困惑(或者说它的输出)。编译器在这种情况下遵循的经验法则是什么?
提前致谢。
模板采用相同类型的两个参数T
。
f(1,'b')
与模板不匹配,因为 1
和 'b'
不是同一类型。
第一个功能:
您定义了一个 f(int,int),因此编译器将采用该函数。
如果你想明确地使用模板,你可以这样称呼它:
f<int>(1,2);
第二个函数:
嗯,您没有定义 f(char,char),但它与您的模板定义相匹配,因此它使用了它。
第三个函数:
您没有 f(T1, T2) 的模板。但是,您在将采用 f(int,int) 的函数上从 char 隐式转换为 int。所以它再次使用该功能。
此外,如果没有定义 f(int,int),那么您的模板函数将不符合为 f(int,char) 调用的条件,因为它具有不同的类型作为参数。
在阅读有关模板的内容时,我遇到了以下代码:
template<class T>
void f(T x, T y) {
cout << "template" <<endl;
}
void f(int w, int z) {
cout << "Non template" <<endl;
}
int main() {
f(1,2);
f('a','b');
f(1,'b');
}
书上说这段代码的输出是:
Non template Template Non template
最后一行 f(1,'b') 让我感到困惑(或者说它的输出)。编译器在这种情况下遵循的经验法则是什么? 提前致谢。
模板采用相同类型的两个参数T
。
f(1,'b')
与模板不匹配,因为 1
和 'b'
不是同一类型。
第一个功能:
您定义了一个 f(int,int),因此编译器将采用该函数。 如果你想明确地使用模板,你可以这样称呼它:
f<int>(1,2);
第二个函数:
嗯,您没有定义 f(char,char),但它与您的模板定义相匹配,因此它使用了它。
第三个函数:
您没有 f(T1, T2) 的模板。但是,您在将采用 f(int,int) 的函数上从 char 隐式转换为 int。所以它再次使用该功能。
此外,如果没有定义 f(int,int),那么您的模板函数将不符合为 f(int,char) 调用的条件,因为它具有不同的类型作为参数。