1、操作符重载
C++可以通过operator
实现重载操作符,格式如下:类型T operator 操作符 ()
,比如重载+
,比如下面这个例子
1 | template<typename T> class A |
又比如STL中的函数对象,重载(),比如下面这个例子
1 | template<typename T> struct A |
2、 操作隐式转换
C++可以通过operator实现重载隐式转换,格式如下: operator T ()
,其中T
是一个类型,比如下面这个例子
1 | class A |
当if(a)
,编译时,它转换成if(a.operator B*())
,其实也就是相当于 if(a._b)
编译器调用函数顺序
(1)寻找和使用最符合函数名和参数类型(包括返回值)的函数,若找到则调用;
(2)否则,寻找一个函数模板,将其实例化产生一个匹配的重载函数,若找到则调用;
(3)否则,寻找可以通过类型转换进行参数匹配的重载函数,若找到则调用它。
如果以上步骤均未找到匹配函数,则这个调用是错误的;如果这个调用有多于一个的匹配选译,则调用匹配出现二义性,也是错误的。