+ -
当前位置:首页 → 问答吧 → c++运行细节,又会得朋友帮下忙

c++运行细节,又会得朋友帮下忙

时间:2011-12-22

来源:互联网

#include<iostream.h>
using namespace std;
int ad(int a,int d){
  return a*d;
  }
float ad(int a,float f){
 return a*f;
 }
int main(){
  int a=10;
  int b=2.5;//这里不是应该强制转换么,为什么没有(int)?
  float s=2.55;
  float g=5.52;
  cout<<ad(a,b)<<endl;
  cout<<ad(s,g)<<endl;//怎样去寻在匹配的函数呢?
  return 0;
  }
大家帮帮忙,这种细节不明白~

作者: freestyleboy21   发布时间: 2011-12-22

int b=2.5;//这里不是应该强制转换么,为什么没有(int)?
这里会调用double类型到int的隐式转换,就像类的类型转换函数一样操作一样
cout<<ad(s,g)<<endl;//怎样去寻在匹配的函数呢?
先找到所有可用的名字叫ad函数,然后进行最佳匹配,如果存在多个最佳匹配就会报错。

作者: woshiwaiwai   发布时间: 2011-12-22

C/C++ code

#include<stdio.h>
#include<string.h>
using namespace std;
int ad(int a,int d){
   return a*d;
   }
float ad(int a,float f){
  return a*f;
  }
int main(){
   int a=10;
   int b=2.5;//编译器会隐式强制转换
   float s=2.55;
   float g=5.52;
   cout<<ad(a,b)<<endl;//根据你传进函数值的类型去匹配函数
   cout<<ad(s,g)<<endl;//怎样去寻在匹配的函数呢?
   return 0;
   }

作者: shenxinji   发布时间: 2011-12-22

别搞模棱两可的重载 编译器不是神仙哪 

A:"明天去加班吗?"
B:"我去! 我不去。"

到底去不去??

作者: gykgod   发布时间: 2011-12-22

把整型提升为浮点被认为是比把浮点转换为整型更好的做法

所以编译器选择第二个

作者: yisikaipu   发布时间: 2011-12-22

你费那事干嘛,用模板弄下不就OK了 啊

作者: gykgod   发布时间: 2011-12-22


你费那事干嘛,用模板弄下不就OK了 啊

作者: cbzjzsb123   发布时间: 2011-12-22

上面那个问题有人说过了
怎样去寻在匹配的函数呢?
先找到所有可用的名字叫ad函数,然后进行最佳匹配,如果没有最佳匹配的话,会选择进行转换之后的最佳匹配,这种选择是以最少转换参数来选择最佳的,函数int ad(int a,int d) 和float ad(int a,float f),与ad(s,g)调用,第二个函数的第二个参数是精确匹配,第一个参数需要进行转换,而第一个函数两个参数都需要转换,所以选择第二个函数为匹配函数。


作者: LoveIOS   发布时间: 2011-12-22

引用 4 楼 yisikaipu 的回复:把整型提升为浮点被认为是比把浮点转换为整型更好的做法
所以编译器选择第二个


这个说法是完全错误的。更正。

作者: yisikaipu   发布时间: 2011-12-22

函数重载的规则是很长的,一两句话说不清楚,见C++primer函数重载,精确匹配,提升,标准转换,用户自定义转换,等,看完就差不多懂了...

作者: mingliang1212   发布时间: 2011-12-22

总发帖11;
正常结贴5;
未结帖6;
建议用模板;

作者: lj10193019   发布时间: 2011-12-22

喔,要纠结这样的问题么?

作者: zhwei_87   发布时间: 2011-12-22