当心隐式类型转换导致重载函数产生二义性

以下内容来自林锐的《高质量C++编程指南》

   

 

示例 8-1-3 中,第一个output函数的参数是int类型,第二个output函数的参数是float类型。由于数字本身没有类型,将数字当作参数时将自动进行类型转换(称为隐式类型转换)。语句output(0.5)将产生编译错误,因为编译器不知道该将0.5转换成int还是float类型的参数。隐式类型转换在很多地方可以简化程序的书写,但是也可能留下隐患。

 

# include <iostream.h>

void output( int x);    // 函数声明

void output( float x);  // 函数声明

 

void output( int x)

{

    cout << " output int " << x << endl ;

}

 

void output( float x)

{

    cout << " output float " << x << endl ;

}

 

void main(void)

{

    int   x = 1;

    float y = 1.0;

    output(x);          // output int 1

    output(y);          // output float 1

    output(1);          // output int 1

//  output(0.5);        // error! ambiguous call, 因为自动类型转换

    output(int(0.5));   // output int 0

    output(float(0.5)); // output float 0.5

}

示例 8-1-3 隐式类型转换导致重载函数产生二义性

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值