以下の定義があります。C++でのテンプレート関数のオーバーロード
using namespace std;
template <typename T>
void foo(const T &s) {
cout << 1;
}
template <typename T>
void foo(const T *s) {
cout << 2;
}
int main(int argc, const char * argv[]) {
char str[] = "ss";
char *s = str;
foo(s);
return 0;
}
そして、それは私の理解から
1
を出力し、両方のバージョンは、constの変換を通過する必要があります。その後、void foo(const T *s)
はより特殊化され、呼び出される必要があります。コンパイラはvoid foo(const T& s)
を選択しました。説明は何ですか?
'のconst T&S'> 'するchar * constの&' –
私はそれをコンパイルすることだし、まだそれが選ぶ信じることができません1 – bolov