0

このコードは、double から int への変換に関する警告を表示します。

template <class T>
int f(T x)
{
    return x;    
}

int main()
{
    cout << f(3.5);
    return 0;
}

ただし、テンプレートを使用しない場合は、以下のように double から int に変換して 3 を出力できます。

int f(float x)
{
    return x;    
}

int main()
{
    cout << f(3.5);
    return 0;    
}

テンプレート化されていないサンプルはコンパイルできますが、テンプレート化されたサンプルはコンパイルできません。テンプレートを使用すると、コンパイラが変換できないのはなぜでしょうか。

テンプレートを使用すると、コンパイラが関数の戻り値の型を double から int に変換できないのはなぜですか??

4

1 に答える 1

2

それはできますが、あなたが間違いを犯したのではないかと疑うかもしれません. 警告とは、問題が発生している可能性があることを知らせるものです。

キャストを追加することで、変換が意図的なものであることをコンパイラに伝えることができます

return static_cast<int>(x);
于 2012-09-22T20:47:02.297 に答える