关于《VC++权威剖析:MFC的原理、机制与开发实例》中的函数重载

       最近在学习《VC++权威剖析:MFC的原理、机制与开发实例》,这本书中一开始就指出函数的重载问题,发现自己关于函数重载的认识还是很浅显。之前一直认为重载就是编译器自动为参数匹配函数类型,然而确实从未想过是编译器经过以下步骤才进行函数匹配的:

       1.具有与实参类型相同的形参的重载函数。

       2.转换实参,将T转换为T&,或T&转换为T,或T转换为const T,然后寻找形参类型匹配的重载函数(T为某数据类型)。

           3.实参进行标准的类型转换,如char->int->unsigned int,然后寻找形参类型匹配的重载函数。

       4.使用构造函数转换实参,使其与某一重载函数匹配。例如,如果类A有构造函数A(int),那么int型的实参可以被编译器转换为类A的临时对象。

       5.使用类型转换函数进行转换,使其与某一重载函数匹配。

       以上是5条是摘自《VC++权威剖析:MFC的原理、机制与开发实例》,1.1,函数重载。

------------------------------------------------------------------------------------------------------------------------

对于第一条,“编译器根据具有实参类型相同的形参的重载函数”,这应该是没什么问题的。

 

至于第二条,什么情况下将T转换为T的引用,则是具体根据函数的定义,如果函数没有定义引用参数,则不会执行这一规则,后面的T&->T或是T->const T也是同样的道理。

 

对于第三条,其中的“实参进行标准的类型转换”,则应该是C++风格的类型转换,一共有4个类型转换符:

const_cast<T>(expression),dynamic_cast<T>(expression),static_cast<T>(expression),reinterpret_cast<T>(expression),其实这四个类型转换符我并没有用过,一直以来都不知道C++原来还有不同于C风格的类型转换方式,这些东西以后研究研究。

 

至于第四条,则是在有构造函数的情况下才会执行,至于为什么在类A中构造函数A(int)会将int型实参转换为类A的临时对象,这个还不能理解,希望以后可以弄明白,还希望看到这篇文章的大牛们能告诉我下,小弟感激不尽~

 

第五条则没什么问题。

我的理解还十分浅显,希望各位高手如有发现不对的地方不吝指教。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值