2015-08-20 3 views
1

code1:Специализированная функция шаблона против специализированной функции шаблона без шаблона ключевого слова

template<typename T> 
T sum(T t1, T t2) 
{ 
    return t1 + t2; 
} 

int sum(int a, int b) 
{ 
    return a + b + a; 
} 

int main() 
{ 
    sum(10,20); 
    return 0; 
} 

code2:

template<typename T> 
T sum(T t1, T t2) 
{ 
    return t1 + t2; 
} 

template<> 
int sum<int>(int a, int b) 
{ 
    return a + b + a; 
} 

int main() 
{ 
    sum(10,20); 
    return 0; 
} 

Есть ли разница в специализированных функций сумм в обоих случаях? Мой компилятор дает одинаковый вывод для обоих случаев. Я всегда следовал первому методу. Разница только в том, что из второго метода мы понимаем, что это специализированная функция при первом взгляде?

+0

Первая перегрузка. Вторая - специализация. –

ответ

2

Первая специализация шаблона, вторая - перегрузка функций. Это важно в правилах разрешения - перегрузка, которая соответствует точно, будет выбрана через специализированный шаблон.

0

Если вы будете иметь функцию sum2:

template<typename T> 
T sum2(T t1, T t2) 
{ 
    ... 
    return sum<T>(t1, t2); 
} 

Он не назвал бы перегруженный вариант 1, но могли бы назвать шаблон специализации от варианта 2.

Смежные вопросы