首页 > 试题广场 >

有函数定义,则以下调用错误的是?

[单选题]
有函数定义:
void test(int a){} 
void test(float a){} 
则以下调用错误的是:
  • test(1);
  • test(‘c’);
  • test(2+’d’);
  • test(0.5);
  • test(2+’d’)
发表于 2014-12-30 15:05:50 回复(0)
更多回答
推荐
D
0.5类型模糊,既匹配int类型也匹配float类型
编辑于 2015-02-04 20:14:24 回复(6)
double<--float
|
long
|
int<--char


转换是从低到高的转换
发表于 2019-03-15 21:40:49 回复(0)
我觉的B也不对啊,B中的字符符号和C中的字符符号都不一样,英文状态下C的是对的,B的不对,但是0.5编译器默认是double,函数给的是float,会警告数据类型发生截断警告。故D也不对,严格来说B、D。
发表于 2018-07-02 10:04:41 回复(0)
D选项调用的时候会产生二义性
发表于 2018-04-09 14:41:38 回复(0)
在VS2008环境下,确实是会像推荐答案说的那样无法确定调用的是哪个函数。

但如果只有test( float a )和test( double a )两个版本(或者只有test( double a )和test( int a )两个版本的,或者是三个版本都有的),会自动进入double的这个版本。所以说从编译器的角度来看,0.5默认为double型也是对的。
发表于 2016-06-23 20:23:56 回复(0)
这题上机调试了下,都正确
发表于 2016-03-29 13:21:32 回复(1)
貌似都正确啊
字符在C++中表示ASCII码,a=97,所以'c'=99,'d'=100
发表于 2015-01-15 20:09:29 回复(0)
推荐的答案不对吧,选D的原因是 :默认浮点数为double型,所以调用test函数时,会报错:参数不匹配
发表于 2016-03-10 19:57:11 回复(3)
编译器会提示参数不匹配,但是不匹配的原因是:类型转换只能从下往上自动转换,而不能自动从上往下转换。

0.5默认是double类型,既不能转换成float类型,也不能转换成int类型。故会提示参数不匹配。 
发表于 2016-06-23 22:10:25 回复(1)
D 错了 ,0.5是double类型  ,应该写成0.5f
发表于 2015-08-20 13:15:39 回复(0)
C/C++语言中,浮点数常量默认就是double,明确指定是float可以使用:0.5f
发表于 2015-10-08 10:53:17 回复(0)

可参考cppp中文第5版p220,浮点数字面值默认为double,可以转换为int或float,产生二义性错误

发表于 2019-08-08 10:48:44 回复(0)
发表于 2019-07-21 11:18:04 回复(1)
因为0.5默认是double类型,因此double类型向下类型转换到int和float 的级别一样,导致了出现多个匹配,所以错误。
发表于 2016-10-04 17:12:36 回复(0)
0.5如果默认是double类型,如果要是float类型,则要写成0.5f。本题的D答案会导致调用出错。
发表于 2016-05-26 21:50:02 回复(0)
发表于 2022-01-15 15:54:22 回复(0)
实验环境:VS2019
C++默认0.5是double类型的。D选项是错误的,但是为什么错呢?
void test(int a)    { cout << "int" << endl; }
void test(float a)  { cout << "float" << endl; }

int main()
{
    test(0.5);
}
编译结果:

VS2019会对0.5进行向下的类型转化,所以会出现可以和多个函数匹配的情况。并不是像其他答案说的那样只能从下到上转换。
总结:错误原因是与多个函数匹配,而不是无法匹配。
当然,也可能编译器不同出现不同结果。
编辑于 2021-12-18 11:10:38 回复(0)
发表于 2018-08-19 15:55:38 回复(0)
float 和 double类型是可以互相隐式转换的,也不会有数据丢失问题,但是double类型和int类型之间,int到double可以隐式转换,double到int就会丢失数据,所以本题既可以调用int也可以调用float,只不过调用int会有数据丢失问题,如果改为test(0.5f)明确指出调用float就可以解决这个问题
发表于 2022-02-05 17:28:40 回复(0)


1、改成0.5f,就是float了,C++中默认的类型转换是从下到上的,就是int ,float可能系统会转成double,但不会将double转化成int,char
2、默认情况下,0.5是double类型
发表于 2019-04-22 21:33:28 回复(0)