c++ - 当我使用模板时,编译器无法将函数的返回类型从 double 转换为 int

标签 c++ templates casting

此代码给出有关从 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类型??

最佳答案

它可以,但它也可能会怀疑您犯了错误。警告就是 - 告诉您可能有问题。

您可以通过添加强制转换告诉编译器转换是有目的的

return static_cast<int>(x);

关于c++ - 当我使用模板时,编译器无法将函数的返回类型从 double 转换为 int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12547546/

相关文章:

c++ - Typedef Student 不工作

c++ - 使用基于模板的构造函数构造 std::function

c - 我是否要转换 malloc 的结果?

c++ - 尝试使用 boost::interprocess::message_queue 时出现 library_error 异常

c++ - 使用锁和 STL 算法对 c++ vector 进行排序,还是编写更复杂的无锁算法?

c++ - 在启动另一个计时器之前等待 20 秒的非阻塞计时器

c++ - 具有未推断上下文的函数模板的部分排序

java - JNI : What signature to use when returning a user defined java class?

python - Pandas DataFrame 转换为 timedelta 失败并出现 loc

java - 从 Iterable<?> 转换为 Iterable<Object> 总是安全的吗?