如何使操作员从对象的左侧工作

How to make operators work from the left of the object?

本文关键字:工作 对象 何使 操作员      更新时间:2023-10-16

这感觉太基本了,还没有问过,所以如果它已经在那里,我会接受链接作为答案,或者如果你认为合适,我会删除这篇文章,就个人而言,我至少在任何地方都找不到它,所以也许这对其他人有用......

所以,是的,就像标题中所说的那样,我如何使运算符允许我从对象的左侧工作?

++obj
variable * obj

如果我想在那个"obj"的右侧工作,我会做一些类似的东西

obj operator*(const variable &t){...} //for obj * variable operation

直觉上我试过

obj *operator(const variable &t){...} //for variable * obj operation(?)

让它反过来工作,但当然,这不起作用,有什么建议吗?

嗯你不能

那样做。我的意思是,选择操作员在哪一边工作。它由标准定义。c++ 中的运算符没有它们操作的边。所有这些都是不同的运算符。重载运算符由签名定义。

无论如何,"边"只对一元运算符有意义。对于二元运算符,它要么是在左操作数上调用的成员函数,右操作数作为参数传递,要么是一个独立的函数。

"允许定义侧面"的情况++--.这是一个特例。 ++cc++实际上是语言方面的两个不同的运算符 - 前递增和后递增。通过重载中的"虚假"参数实现的区别:http://en.cppreference.com/w/cpp/language/operator_incdec。

还有其他一元运算符,你不能选择边,例如:!~,没有为"右侧"情况定义合适的重载。

其他消除歧义也是通过参数完成的。 *用于成员访问和算术运算。重载的运算符由参数数定义。

T T::operator*(const T2 &b) const;是人工的,R& T::operator*();是会员访问。

在这里,您可以找到所有运算符的规则:http://en.cppreference.com/w/cpp/language/operators。

Aaand,因为它的c ++你可以滥用它。不过不推荐。

你可以重载函数并使该函数成为类的朋友。

variable operator*(const variable &, const variable *);
class variable {
    friend variable operator*(const variable &, const variable *);
};