C++运算符重载++

4
哪一段代码是正确的,为什么?
C C::operator++() {
    x++; 
    y++; 
    return *this; 
}


C & C::operator++() {
    x++; 
    y++; 
    return *this; 
}

谢谢


3
当你亲自测试这两个东西时,发生了什么? - admdrew
1
引用返回是“正确的”(这是一个左值的事情)。请参见此答案并向下滚动到适当的子部分。 - WhozCraig
我会选择第二个(&C 返回)。 - thedarkside ofthemoon
3
正如评论和答案所提到的那样,第二个选项是“更”正确的。顺便说一句,对于那些对这个问题进行了负面评分的人,请说明原因。这是一个构思良好且有趣的问题,不应该被扣分。 - David Titarenco
2
也许这个问题被踩是因为它没有展示任何研究努力。 - anatolyg
显示剩余3条评论
2个回答

7
第二种是惯用的方式:没有参数的 operator++ 是前缀增量运算符,应该返回对自身的引用。

哪个函数是前缀:operator(int)++还是operator()++?我知道其中一个需要参数:http://forums.codeguru.com/showthread.php?231051-C-Operator-How-to-overload-postfix-increment-and-decrement-operators - Thomas Matthews
@ThomasMatthews 是我在我的回答中提到的那个 :-) - juanchopanza

4
两种写法都是“正确”的,但第二种写法更为习惯用语,因为预期前缀 operator ++ 返回一个左值。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接