次の関数テンプレートは、入力された値から最大値を計算しようとします。FT は、単一のデータ型で使用すると問題なく動作しますが、2 つの異なるデータ型で使用すると警告が表示されます。
機能は次のとおりです。
template<typename T,typename U>
const T& maxVal(const T& var1,const U& var2)
{
if(var1<var2)
return var1;
else
return var2;
}
ユーザー関数 ( main ) は次のとおりです。
int main(void)
{
int var1 = 10;
double var2 = 20.10;
cout<<maxVal(10,20.10)<<endl; // warning displayed " returning reference to temporary"
cout<<maxVal(var1,var2)<<endl; // warning still persists in this case
return 0;
}
データ型を削除U
して に置き換えるとT
、プログラムはスムーズに実行されます。なぜこうなった?