1、程序员用complex::operator+()和complex::operator*()分别表示+和*的含义。当b和c的类型是complex时,b+c等价于b.operator+(c)。
2、对于任意一种二元运算符@,aa@bb可以理解成aa.operator@(bb)或者operator@(aa,bb)。对于任意一元后置运算符@,aa@可以理解成aa.operator@(int)或者operator@(aa,int)。
3、考虑二元运算符@的情况。假设x的类型是X,y的类型是Y,则x@y的解析过程是:
- 如果X是一个类,查找X是否有成员operator@或者X的基类是否有成员operator@;
- 在x@y的上下文中查找是否有operator@的声明;
- 如果X定义在名字空间N中,在N的范围内查找operator@的声明;
- 如果Y定义在名字空间M中,在M的范围内查找operator@的声明。
4、我们可以通过为源类型定义一个类型转换运算符来进行用户自定义类型向内置类型的隐式转换。成员函数X::operator T()定义了从X向T的类型转换,其中T是一个类型名。
class Tiny{
char v;
public:
operator int() const {return v;} //转换成int的函数
}
5、把类型转换运算符声明为explicit并且明确只有当直接初始化时才使用它。