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 回答