Perché l'uscita di questo code:Specializzata modello di funzione per i tipi di riferimento
#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) ;
}
è
Generale
Generale
Generale
Il terzo è Sorprendente perché la funzione era specializzata esattamente f o int&
Modifica: so che il sovraccarico potrebbe essere una soluzione adeguata. Voglio solo imparare la logica dietro.
Forse perché const int & è preferito a int &? – Septagram
@Septagram: const int &? –
Non so se sia d'aiuto, ma se cambi il template per accettare un 'T &', allora sia 'f (y)' che 'f (z)' chiamano la versione 'int & '. –