gpt4 book ai didi

c++ - 可以在 C++ 的函数模板中转换参数吗?

转载 作者:搜寻专家 更新时间:2023-10-31 01:40:14 25 4
gpt4 key购买 nike

比如我有一个函数模板:

template<typename T> void foo(T a, T b, T &c);

如果我通过 int, double, double 怎么办?到吗?在 Xcode 中它报告错误。那么这是否意味着我不能为一种模板类型传递不同类型的参数?

在另一种情况下,如果我调用 foo<double>(double, int, int) ,这是一个错误。但是foo<int>(double, int, int)会没事的。这个问题与引用类型有关吗?

最佳答案

如果不显式指定类型,则不能传递不同的类型。模板是强类型的,如果类型不完全匹配,类型推导就会失败。

在第一个示例中,您指定了模板类型,因此使用 double

显式实例化模板
foo<double>(T, T, T&)

因此该函数将参数(double, double, double&)。该示例不起作用,因为编译器不会为基本类型引用执行类型转换(即,int n; double& c = n; 或反过来),并且您将 int 作为最后一个参数传递,它不能绑定(bind)到 double& 引用。

第二个例子

foo<int>(T, T, T&)

没关系,您明确指定类型并使用参数 (int, int, int&) 实例化函数。现在,编译器对第一个参数执行所需的转换(double-to-int);没有对引用执行任何转换。

关于c++ - 可以在 C++ 的函数模板中转换参数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30066469/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com