注册 登录
编程论坛 C++教室

类型转化问题

mingreign 发布于 2007-10-02 19:44, 993 次点击

#include <iostream>
using namespace std;
int test(int ,int );
float test(float ,float );
int test(int,int,int);
int test(int a ,int b)
{
return a+b;
}

float test(float a,float b)
{
return a+b;
}
int test(int a,int b,int c)
{
return a+b+c;
}
int main()
{
cout << test(1,2) << endl;
cout<< test(2.111 ,3.1114 ) << endl;
cout<<test(1,2,4)<<endl;
return 0;
}
test(2.5548,3.6842)调用为什么会出错.

17 回复
#2
编程高手2007-10-03 02:53
怎么又是这个??
#3
cince2007-10-03 08:52
float test(float,float)->float test(float&,float& );
float test(float a,float b) ->float test(float &a,float &b)
#4
csmenglei9512007-10-03 11:03
楼上的,为什么要这样写啊,能解释下吗?
这样编译是没错,但结果并不是float型的

[此贴子已经被作者于2007-10-3 11:16:21编辑过]

#5
海子星竹2007-10-03 20:39

#include <iostream>
using namespace std;

int test(int ,int );
double test(double,double);
int test(int,int,int);

int test(int a ,int b)
{
return a+b;
}

double test(double a ,double b)
{
return a+b;
}

int test(int a,int b,int c)
{
return a+b+c;
}

int main()
{
cout << test(1,2) << endl;
cout<<test(2.111 ,3.1114) << endl;
cout<<test(1,2,4)<<endl;
return 0;
}

2.111,3.1114是double 型数据

#6
aipb20072007-10-04 12:53

LS两位没弄懂实质。

如LS所言,2.111这样的字面值常量是const double类型。

在重载函数调用时,test(2.111 ,3.1114),首先寻找精确匹配,但是这里没有test(double,double),
所以要发生类型转换,问题就来了,double类型可以隐式转换为int,也可以隐式转换为float,你这里两种转换所带
来的匹配均可以发生,就出先了 “2义性——选哪个” 的问题,所以编译器不能判断。

#7
etherli2007-10-04 13:27
把test(2.111,3.1114)改为test(2.111f,3.1114f)就可以了
2.111,3.1114系统默认为double类型,加f后就float类型了
#8
夜子2007-10-04 15:52
那么如果执行test(3,3.1);结果为什么是6呢,代码里面也没有精确匹配testid德函数阿
#9
夜子2007-10-04 15:54
就是说为什么test(3,3.1)是可以执行的呢?希望高手指点下。。
谢谢
#10
aipb20072007-10-04 15:58
不是说非要精确匹配,可以在允许条件和不出现2义性时转换类型再调用!
#11
mingreign2007-10-04 16:55
回复:(etherli)把test(2.111,3.1114)改为test(2.11...
   首先谢谢你的回复,那么你可以告诉我为什么要把他默认为double呢?毕竟他是一个float呀.
#12
mingreign2007-10-04 16:58
回复:(aipb2007)LS两位没弄懂实质。如LS所言,2.11...
   你说先寻找精确匹配.那么为什么不默认为long double呢?
#13
aipb20072007-10-04 20:47
以下是引用mingreign在2007-10-4 16:58:44的发言:
   你说先寻找精确匹配.那么为什么不默认为long double呢?

那你认为我打个 5 是int 还是 short,还是long?

是int吧,谁告诉你的呢?

因为语言就是这么定义的,这些书上都有!

[此贴子已经被作者于2007-10-4 20:50:12编辑过]

#14
mingreign2007-10-04 22:00
回复:(aipb2007)以下是引用mingreign在2007-10-4 1...
    很感谢你的指教,使我又有了新的进步.
#15
aipb20072007-10-04 22:35
u're welcome..
#16
mingreign2007-10-05 10:05
回复:(aipb2007)u\'re welcome..
      可以告诉我,你也是学C++的吗?希望我们之间的交流能更加深入.
#17
aipb20072007-10-05 12:52
回复:(mingreign)回复:(aipb2007)u\\\'re welcome...

要学的太多了,我喜欢c++,论坛就是个交流的地方,这里热心人很多的。

#18
mingreign2007-10-20 11:10
回复:(aipb2007)回复:(mingreign)回复:(aipb2...
       谢谢,你说的确实是个事实,我的想法是希望我们之间的交流能更加方便,使一些问题能进入深层次的探讨,如果你同意我的建议,请你留下你的QQ.我会加你的,希望我们都会有一个更大的进步.
1