Quando ho due overload di funzione su modelli come questo:funzione template overloading: const * contro const &
template<class T>
void foo(T const&)
{
// do something with a const reference
cout << "const reference version";
}
template<class T>
void foo(T const*)
{
// do something with a const pointer
cout << "const pointer version";
}
Perché il compilatore scegliamo la prima versione quando un'istanza con un tipo puntatore non-const?
int* bar;
foo(bar); // prints "const reference version"
char const* baz;
foo(baz); // prints "const pointer version"
È possibile trovare una buona spiegazione di questo problema sul canale 9: http://channel9.msdn.com/Series/C9-Lectures-Stephan-T-Lavavej-Core-C-/Stephan-T-Lavavej-Core -Cpp-3-di-n. Ma fondamentalmente Mark B ha risposto alla tua domanda. – mkaes