函数重载相关注意事项

1.重载函数调用问题中的枚举类型提升

1      void newf(unsigned char); 
2      void newf(int); 
3      unsigned char uc = 129; 
4      newf(VIRTUAL); // calls newf(int) 
5      newf(uc);      // calls newf(unsigned char) 

枚举类型 Tokens 只有两个枚举成员, 最大的值为 129。 这个值可以用 unsigned char 类型表示,很多编译器会将这个枚举类型存储为 unsigned char 类型。然而,枚举成员 VIRTUAL 却并不是 unsigned char 类型。就算枚举成员的值能存储在 unsigned char 类型中,枚举成员和枚举类型的值也不会提升为 unsigned char 类型。

2.“仅当形参是引用或指针时,形参是否为 const 才有影响。”,这是《C++ Primer》中的一句话,如果形参是非const引用,这种情况很好理解,不必多说;如果形参是const引用,理解起来要转个弯,《C++ Primer》中的这段话可以辅助理解:“如果传递的是非 const 对象,则上述任意一种函数皆可行。非 const 对象既可用于初始化 const 引用,也可用于初始化非 const 引用。但是,将 const 引用初始化为非 const 对象,需通过转换来实现,而非 const 形参的初始化则是精确匹配。”。有了这段话,下面这两个重载函数的调用就不会混淆:

1      Record lookup(Account&); 
2      Record lookup(const Account&); // new function 
3      const Account a(0); 
4      Account b; 
5      lookup(a);   // calls lookup(const Account&) 
6      lookup(b);   // calls lookup(Account&) 

 另外,“对指针形参的相关处理如出一辙。”,“注意不能基于指针本身是否为 const 来实现函数的重载:”,譬如如下代码:

1      f(int *); 
2      f(int *const); // redeclaration 

“此时,const 用于修改指针本身,而不是修饰指针所指向的类型。”

 

 

 

 

 

 

 

转载于:https://www.cnblogs.com/tingshuixuan2012/archive/2013/03/30/2991012.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值