首页 > 试题广场 >

在下列对fun的调用中,错误的是?

[单选题]
有如下模板定义:
template <class T>
T fun(T x,T y){
    return x*x+y*y;
}
在下列对fun的调用中,错误的是()
  • fun(1, 2)
  • fun(1.0, 2)
  • fun(2.0, 1.0)
  • fun<float>(1, 2.0)
推荐
答案:B
首先这个题目有误,模板函数应该定义为(加返回值类似声明):
template <class T>
T fun(T x,T y){
return x*x+y*y;}
然后这里T要求类型一致
A,类型一致,为int型
B,类型不一致,错我
C,类型一致,为folat型
D,用<float>进行声明,后面的实参会强制类型转换为float,所以也是类型一致的。
编辑于 2015-01-31 11:22:39 回复(4)
答案是B

这道题是考察C++模版
A 1 2 都是int,所以T也是int,没错
B 一个参数1.0是double 第二个2是int T有歧义错误
C 2.0 1.0都是double T是double,没错
D 函数指定了T是float,没错。
编辑于 2015-01-13 15:58:40 回复(0)
   考察点:模板的使用
   答案:B

原理:

空谈不实践,没意思,
上代码,最下面看准了编译器的提示;
 “T fun(T,T)”: 模板 参数“T”不明确 



发表于 2015-01-29 20:39:58 回复(4)
模板函数一定要求类型一致,D为强制转换成float型
发表于 2015-10-22 17:14:06 回复(0)
这里涉及到模板类型匹配时的类型转换
1>如果使用模板参数类型自动推断,那么参数类型转换只支持非const到const以及数组和函数指针到指针的抓换,因此B选项中1.0无法类型转换为int.
2>如果显式指定参数类型,即fun<int>(1.3,2),则可以进行相应的类型转换,D正确
3>如果模板参数为非模板参数,即template<typename T> void test(const T&,int i ),则参数i可以进行类型转换
发表于 2016-10-04 17:19:26 回复(0)
模板函数一定要求类型一致,D为强制转换成float型
发表于 2015-09-29 12:02:39 回复(0)
模板,template
编辑于 2019-05-09 20:09:00 回复(0)
模板里面的类型要一致,B里面的不一致
发表于 2019-04-15 13:45:41 回复(0)
模板函数一定要求类型一致,D为强制转换成float型
发表于 2018-06-02 09:49:30 回复(0)
答案:B 函数模板的使用: - 自动类型推导调用 ABC - 具体类型显示调用 D 注意事项:函数模板本身不允许隐式类型转换 - 自动推导类型时,必须严格匹配 - 显示类型指定时,能够进行隐式类型转换 综上所述:选B
发表于 2017-03-25 09:56:23 回复(0)
带有模板类的方法调用时,要给模板赋类型,不赋值类型,就会找一个参数的,然而,第二个参数要的是int来的float,彭,不行了....
发表于 2016-11-14 18:40:18 回复(0)
在模版参数类型推导中的类型转换只允许: 1、数组名转指针 2、非const 转const 除非像D那样指定类型
发表于 2016-08-03 18:54:35 回复(0)
参数的类型要一致。
发表于 2016-05-23 16:42:39 回复(0)
 B
发表于 2015-05-20 18:22:14 回复(0)
B
发表于 2015-05-15 09:19:44 回复(0)
B
编译器无法知道模板T是double,int还是其他
发表于 2015-04-09 15:02:29 回复(0)
B  参数不明确
发表于 2015-04-07 20:52:46 回复(0)
答案 A

正确的调用是
  • fun(1,2)
发表于 2015-01-13 12:48:06 回复(0)