2011-06-16 54 views
5
MyClass MyClass::operator++(int) { 
    return ++(*this); 
} 

这就是我写的代码。我正常工作,但所有的教程说,我要创建一个临时对象并返回它:超载后递增运算符

MyClass MyClass::operator++(int) { 
    MyClass tmp = *this; 
    ++(*this); 
    return tmp; 
} 

请告诉我哪条路是最好的?

+0

你实施的是预先增量。 – trutheality 2011-06-16 16:43:17

回答

5

第二个! 后增量意味着变量在评估表达式后递增。

简单的例子:

int i = 10; 
int j = i++; 

cout<<j; //j = 10 
cout<<i; // i = 11 

你的第一个例子将使j = 11,这是不正确。

6

第一个版本是错误的,因为它返回新的值。后增加操作符应该返回旧值。

2

该教程是正确的。

您的版本返回错误的值。后增加运算符应该返回以前的值,而不是新值。用普通的旧int检查自己:

int x = 5; 
int y = x++; 
cout << x << y << endl; // prints 56, not 66. 
0

这是由于增量后运算符的定义。

后递增算子:增量AFTER使用该值。

预增加算子:增量之前使用该值。

所以,如果你这样做,从函数返回的值是递增的。

本教程将增加对象本身,但返回该对象的未增加的COPY