小编Ail*_*een的帖子

如何确定夹心模板将被使用

我正在学习c ++中的模板,并且发现了以下示例。

据我了解,如果没有匹配的非模板函数,编译器应始终尝试使用最“专业化”的模板,但是在此示例中,第一次调用导致调用函数a(T *)而不是a(int) *)。为什么?为何第二通电话的行为有所不同?

template<typename T>
void a(T) {cout << "(T)" << endl;}

template<>
void a<>(int*) {cout << "(int)" << endl;}

template<typename T>
void a(T*) {cout << "(T*)" << endl;}

template<typename T>
void b(T) {cout << "(T)" << endl;}

template<typename T>
void b(T*) {cout << "(T*)" << endl;}

template<>
void b<>(int*) {cout << "(int)" << endl;}

int main()
{
  int i;
  a(&i);
  b(&i); 
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

结果输出为:

(T*)
(int)
Run Code Online (Sandbox Code Playgroud)

我期望它是:

(int)
(int)
Run Code Online (Sandbox Code Playgroud)

c++ templates

6
推荐指数
1
解决办法
113
查看次数

标签 统计

c++ ×1

templates ×1