这个问题感觉太基础了,以至于没有人问过,所以如果它已经存在,我会接受链接作为答案,或者如果你们认为合适,我会删除这篇文章,就我个人而言,至少我在任何地方都找不到它所以也许这对其他人有用...
是的,就像标题中所说的那样,我如何制作可以让我从对象的左侧开始工作的运算符? f.e:
++obj
variable * obj
等等
如果我想在那个“obj”的右侧工作,我会做类似的东西
obj operator*(const variable &t){...} //for obj * variable operation
凭直觉我试过了
obj *operator(const variable &t){...} //for variable * obj operation(?)
让它以相反的方式工作,当然,那没有用,有什么建议吗?
最佳答案
嗯,你不能那样做。我的意思是,选择运算符(operator)在哪一侧工作。它由标准定义。 C++ 中的运算符没有它们操作的边。都是不同的运营商。您重载的运算符由签名定义。
无论如何,“边”只对一元运算符有意义。对于二元运算符,它要么是在左操作数上调用的成员函数,右操作数作为参数传递,要么是独立函数。
“允许边定义”的情况是++
和--
。而且是特例。 ++c
和 c++
实际上是两种不同的语言运算符——前递增和后递增。通过重载中的“伪造”参数实现的区别: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++ 你可以滥用它。不过不推荐。
关于c++ - 如何让运算符从对象的左侧开始工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28114429/