万能的C++漏了点什么吗?

本文探讨了C++中函数重载的解析机制,并通过一个具体示例展示了编译器如何选择合适的重载函数。作者指出在一个特定场景下,期望的函数调用并未如预期般工作,引发了对C++编译器解析规则的讨论。

可以说使用C++的过程是一个充满了惊喜的过程,因为常常的,会听说新鲜实用的语言特性,比如,函数重载:

   1: void func(int i);
   2: void func(double d);
   3: void func(const char* s);

在调用func的时候,根据所传参数的类型,编译器会自动选择合适的函数。

但是,在这个例子中,C++却没有给我惊喜:

   1: void func(const char* c){}
   2: struct _class
   3: {
   4:     void func(int i)
   5:     {
   6:     }
   7:     void call()
   8:     {
   9:         ::func("hello"); // work
  10:         func("hello");   // expected call global void func(const char* c){},
  11:                          // but doesnt compile
  12:     }
  13: };
  14:  
  15: int main()
  16: {
  17:     _class o;
  18:     o.call();
  19: }

编译出错:

error C2664: '_class::func' : cannot convert parameter 1 from 'const char [6]' to 'int'

窃以为C++其实可以给我这个惊喜的,为什么他没有给?要知道C++连模板参数都能推导出来!

转载于:https://www.cnblogs.com/tactoth/archive/2009/09/17/1568723.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值