当一个重载操作符是一个名字空间的函数时,对于操作符的第一个和第二个参数,即等于操作符的左和右两个操作数,都会考虑转换.
一般应该怎样决定是把一个操作符声明为类成员还是名字空间成员呢?在某些情况下程序员没有选择的余地:
1 如果一个重载操作符是类成员,那么只有当跟它一起被使用的左操作数是该类的对象时,它才会被调用.如果该操作符的左操作数必须是其他的类型,那么重载操作符必须是名字空间成员.
2 C++要求赋值= 下标[] 调用() 和成员访问箭头-> 操作符必须被定义为类成员操作符.任何把这些操作符定义为名字空间成员的定义都会被标记为编译时刻错误.
例如:
// 错误: 必须是类成员
char& operator[]( String & ,int ix );
3 除此之外由类设计者选择把操作符声明为一个类成员还是一个名字空间成员.如果有一个操作数是类类型,如String 类的情形,那么对于对称操作符,比如等于操作符最好定义为名字空间成员.