只可以重定义类或者枚举类型的运算
运算符的操作数数量必须保持不变
运算优先级无法改变
运算符左边的算子叫做receiver
运算符为成员函数:
receiver决定使用运算符的哪一个定义
运算符左边变量为对象,右边变量为其他数据类型:使用右边变量构造一个运算符需要的参数类型的对象进行运算
如果运算符需要的参数类型,没有方法能从运算符右边的变量构造一个相应类型的对象,那么就会出错
运算符为全局函数:
会自动对两个操作数进行可执行的类型转换并寻找符合参数类型条件的运算符定义进行运算
单目运算符应该定义为成员函数
=() [] -> ->*必须定义为成员函数
其他所有二元的运算符定义为非成员函数(friend函数)
运算符函数的原型都是inline函数 ????
运算符函数的返回值类型,考虑运算结果将会被如何使用
c++编译器会尽可能地自动地调用构造函数,当数据类型不符合的时候
如果对构造函数添加explicit关键字,那么该构造函数将不会被编译器自动调用
类型转换运算符的重载:X::operator T()
operator 的名字T是类型描述
没有明确的参数
没有返回值类型
对于类T和类C,如果
1.C(T)是合法的构造函数(非explicit)
2.如果类T定义了一个函数operator C()
那么T可以被转为C。如果1和2同时存在,那么会发生冲突。
不使用默认的类型转换函数,自定义类型转换函数(函数名也自定义)
构造函数加explicit,防止被默认调用