Почему выход этого code:Специализируется шаблон функции для ссылочных типов
#include <iostream>
template<typename T> void f(T param)
{
std::cout << "General" << std::endl ;
}
template<> void f(int& param)
{
std::cout << "int&" << std::endl ;
}
int main()
{
float x ; f (x) ;
int y ; f (y) ;
int& z = y ; f (z) ;
}
является
Общие
Общие
Общие
Третий один surprizing потому функция была специализированной точно f или int&
Редактировать: Я знаю, что перегрузка может быть правильным решением. Я просто хочу изучить логику этого.
Может быть, потому что сопзЬ ИНТ является предпочтительным и для Int &? – Septagram
@ Сепараграмма: const int &? –
Я не знаю, помогает ли это, но если вы измените шаблон, чтобы принять 'T &', то оба 'f (y)' и 'f (z)' вызывают 'int &' версию. –