8

次のようなテンプレート化された関数のオーバーロードが 2 つある場合:

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";
}

非 const ポインター型でインスタンス化されたときにコンパイラーが最初のバージョンを選択するのはなぜですか?

int* bar;
foo( bar ); // prints "const reference version"

char const* baz;
foo( baz ); // prints "const pointer version"
4

4 に答える 4