特别是,前缀运算符的按引用返回对我来说很有意义——它很有用,以防人们想对对象进行进一步的操作。
但是,我无法理解为什么后缀运算符被设计为按值返回。
它仅仅是一个约定,还是有充分的理由为什么它是这样设计的(比如按值返回对后缀没有意义,但对前缀有意义)?
有人可以解释吗?
回答
多亏了下面的答案,后缀运算符似乎不一定要按值返回(根据标准)。
但是,由于后缀运算符的语义要求(返回原始值,但之后增加对原始值的引用),结合标准要求:
运算符重载是函数,因此所有副作用都必须在函数完成之前发生。
正如下面David Rodriguez清楚地解释的那样,分叉值似乎是语义要求的必然结果。
在这种情况下,由于我们正在返回另一个值(不是原始引用,因为它会被函数的右括号改变),按值返回另一个值似乎是最有意义的。