テンプレートについて読み始めましたが、以下で混乱しました。
template<class T>
T max(T t1, T t2)
{
if (t1 > t2)
return t1;
return t2;
}
int main(){
std::cout<<max<int>(120,14.55);
return 0;
}
出力は 120 です。しかし、上記をコンパイルすると、次の警告が表示されました。
warning:passing double for argument 2 to T max(T, T) [with T = int].
私の質問は、 のインスタンス化を既に行っているため、この警告が表示された理由ですT max(int t1,double t2)
。
ここでの私の理解によると、明示的に 1 つのデータ型 (ここでは ) のみを言及すると、コンパイラによってint
引数の型 ( ) から他の型が差し引かれます。14.55
つまり、この場合はT max(T t1, T t2)
インスタンス化されます。T max(int t1,double t2)
この概念は、インターネット上のいくつかのテンプレート ドキュメントから読みました。
疑問を解消してください。そうしないと先に進めません。