| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 993 人关注过本帖
标题:类型转化问题
只看楼主 加入收藏
mingreign
Rank: 1
等 级:新手上路
帖 子:66
专家分:0
注 册:2007-9-15
收藏
 问题点数:0 回复次数:17 
类型转化问题

#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)调用为什么会出错.

搜索更多相关主题的帖子: int test float 类型 return 
2007-10-02 19:44
编程高手
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2007-10-2
收藏
得分:0 
怎么又是这个??
2007-10-03 02:53
cince
Rank: 1
等 级:新手上路
威 望:1
帖 子:108
专家分:0
注 册:2007-1-21
收藏
得分:0 
float test(float,float)->float test(float&,float& );
float test(float a,float b) ->float test(float &a,float &b)

There Is Nothing Impossible In My Dictionary.
2007-10-03 08:52
csmenglei951
Rank: 1
等 级:新手上路
威 望:1
帖 子:77
专家分:0
注 册:2007-9-30
收藏
得分:0 
楼上的,为什么要这样写啊,能解释下吗?
这样编译是没错,但结果并不是float型的

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

2007-10-03 11:03
海子星竹
Rank: 1
等 级:新手上路
威 望:1
帖 子:58
专家分:0
注 册:2007-9-4
收藏
得分:0 

#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 型数据

2007-10-03 20:39
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
收藏
得分:0 

LS两位没弄懂实质。

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

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


Fight  to win  or  die...
2007-10-04 12:53
etherli
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2007-9-14
收藏
得分:0 
把test(2.111,3.1114)改为test(2.111f,3.1114f)就可以了
2.111,3.1114系统默认为double类型,加f后就float类型了
2007-10-04 13:27
夜子
Rank: 1
等 级:新手上路
帖 子:46
专家分:0
注 册:2007-10-2
收藏
得分:0 
那么如果执行test(3,3.1);结果为什么是6呢,代码里面也没有精确匹配testid德函数阿

2007-10-04 15:52
夜子
Rank: 1
等 级:新手上路
帖 子:46
专家分:0
注 册:2007-10-2
收藏
得分:0 
就是说为什么test(3,3.1)是可以执行的呢?希望高手指点下。。
谢谢

2007-10-04 15:54
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
收藏
得分:0 
不是说非要精确匹配,可以在允许条件和不出现2义性时转换类型再调用!

Fight  to win  or  die...
2007-10-04 15:58
快速回复:类型转化问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.031042 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved