有没有办法重载指针赋值运算符? 例如
时,为A类重载指针赋值运算符A *x, *y;
x = y;
答案 0 :(得分:2)
不,这是不可能的。指针类型是标量类型,但重载运算符需要非标量参数。特别是([over.oper] p6):
运算符函数应该是非静态成员函数或者是非成员函数 至少一个参数,其类型是类,对类的引用,枚举或对引用的引用 枚举。
如果你有一个二元运算符,其中一个参数是用户定义的类型而另一个是指针,那就可以了,但在你要问的情况下,两个操作数都是指针。
答案 1 :(得分:0)
没有"指针赋值运算符"。这是赋值运算符,您将它与指针操作数一起使用。
除非至少有一个操作数具有类或枚举类型,否则无法重载运算符。 (指针类型不是类类型)。
答案 2 :(得分:0)
不,因为只有当至少一个参数具有类或枚举类型时才会考虑重载运算符。 (指向类类型的指针被认为是一种基本类型,并不算作“类类型”本身。)
C ++标准[over.match.oper] / 1-2:
如果表达式中的运算符的操作数没有类型或枚举类型,则假定运算符是内置运算符并根据子句[expr]进行解释。
如果任一操作数具有类或枚举类型,则可能声明用户定义的操作符函数来实现此运算符,或者可能需要用户定义的转换将操作数转换为适合于内置运营商。在这种情况下,重载决策用于确定调用哪个运算符函数或内置运算符来实现运算符。
(尽管您可能会鼓励A
的用户使用类似智能指针的类APtr
而不是原始指针来获得所需的行为。)