In C++, se ho una funzione generica:Come funziona la deduzione del tipo per i letterali stringa in C++?
template <typename T>
void func(T& s)
{
std::cout << "in generic\n";
std::cout << typeid(s).name();
}
T
andranno dedotto a typeid(s).name()
.
Ma come mai se faccio:
func("test");
Tale funzione generica funziona, ma questo non lo fa:
void func(const char*& s)
{
std::cout << "in overloaded\n";
std::cout << typeid(s).name();
}
so che funzionerà se cambio const char*&
-const char*
oppure const char* const&
nella firma della funzione sovraccarica e che se voglio passare un argomento alla funzione sovraccaricata, deve essere non temporaneo. Non capisco cosa sia successo a T&
, non dovrebbe trasformarsi in const char*&
dopo la detrazione?
e char const (&) [5] è una matrice di riferimenti const a char? – Pavel
@ paulpaul1076: No. È un riferimento a una matrice di 5 caratteri cost. Sottile differenza nella formulazione, ma piuttosto importante (per prima cosa, non si può avere una serie di riferimenti). –
Grazie amico, ora ho capito – Pavel