C++一元运算符重载时如何判断运算符应放在对象的左侧还是右侧
C++一元运算符重载的位置判断规则
- 你给出的重载函数属于无参数的类成员一元运算符重载,这种写法固定对应前置运算符,调用时必须把运算符放在对象前面,所以示例中的
car o3=*o2是正确写法,反过来写o2*会触发编译报错,找不到匹配的运算符重载。 - 如果你要实现后置的一元*运算符(仅语法层面允许,实际业务很少这么定义),需要给重载函数加一个无用的int占位参数,写法如下:
car operator * (int) { car temp; temp.a = a*3; temp.b = b*3; return temp; }
这时候调用就需要把*放在对象后面,写成o2*即可,占位参数不需要手动传值,编译器会自动填充0。
- 通用判断规则:
- 成员函数重载的一元运算符:无额外参数对应前置,带int占位参数对应后置
- 全局函数重载的一元运算符:只有1个类类型参数对应前置,第2个参数为int占位参数对应后置
内容的提问来源于stack exchange,提问作者AK d
相关产品推荐
相关产品推荐

