Почему вывод этого кода:
#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) ;
}
is
Общие
Общие
Общие
Третий вызывает удивление, потому что функция была специализирована именно для int&
Изменить: я знаю, что перегрузка может быть правильным решением. Я просто хочу изучить логику этого.
T &
, то иf(y)
, иf(z)
вызовут версиюint &
. - person Daniel Gallagher   schedule 13.01.2011f(2);
. Также выходf(y)
равенint&
. - person ali_bahoo   schedule 13.01.2011void f(int& param)
gotw.ca/publications/mill17.htm - person hansmaad   schedule 13.01.2011const T &
иconst int &
, чтобы заставить работатьf(2)
, но да,f(y)
,f(z)
иf(2)
будут вызывать версиюconst int &
. - person Daniel Gallagher   schedule 13.01.2011template < > void f<int&>(int& blah)...
- person Edward Strange   schedule 13.01.2011