【发布时间】:2021-10-22 02:17:23
【问题描述】:
我目前正在 learncpp.com 上学习运算符重载,并遇到了一个我无法完全理解的声明。这里是:
在处理修改左操作数的二元运算符时 (例如 operator+=),通常首选成员函数版本。 在这些情况下,最左边的操作数将始终是类类型,并且让被修改的对象成为由 *这是自然的。因为最右边的操作数成为显式参数,所以不会混淆谁被修改以及谁被修改 正在接受评估。
我不明白为什么左手操作数总是类类型。例如,如果我要重载 +=,为什么不能像下面这样将用户定义的类作为右手参数进行重载?
void operator+=(int blah, MyNewClass foo);
提前致谢!
【问题讨论】:
-
不要忽略“通常首选”和“这些情况”这两个词。你可以按照你的建议去做,但是这样的操作员不会赢得你同事的任何尊重。 (不过,它可能会让你在“混淆 C++”竞赛中获得一些分数。)
-
@molbdnilo,我很难理解的是最左边的操作数将始终是类类型的断言。虽然我的例子可能不常见(或不明智),但我不明白为什么这是不可能的。你认为你能详细说明为什么这是不可能的吗?
-
在这些情况下始终是类类型,而这些情况是成员函数版本。正如我所说,这是可能的。你试过了吗?
-
啊,我明白了——“这些情况”是指运算符被成员函数重载时,而不是修改左操作数的二元运算符。这完全有道理 - 感谢您的澄清!