MyClass MyClass::operator++(int) {
return ++(*this);
}
这就是我写的代码。我正常工作,但所有的教程说,我要创建一个临时对象并返回它:超载后递增运算符
MyClass MyClass::operator++(int) {
MyClass tmp = *this;
++(*this);
return tmp;
}
请告诉我哪条路是最好的?
MyClass MyClass::operator++(int) {
return ++(*this);
}
这就是我写的代码。我正常工作,但所有的教程说,我要创建一个临时对象并返回它:超载后递增运算符
MyClass MyClass::operator++(int) {
MyClass tmp = *this;
++(*this);
return tmp;
}
请告诉我哪条路是最好的?
第二个! 后增量意味着变量在评估表达式后递增。
简单的例子:
int i = 10;
int j = i++;
cout<<j; //j = 10
cout<<i; // i = 11
你的第一个例子将使j = 11
,这是不正确。
第一个版本是错误的,因为它返回新的值。后增加操作符应该返回旧值。
该教程是正确的。
您的版本返回错误的值。后增加运算符应该返回以前的值,而不是新值。用普通的旧int检查自己:
int x = 5;
int y = x++;
cout << x << y << endl; // prints 56, not 66.
这是由于增量后运算符的定义。
后递增算子:增量AFTER使用该值。
预增加算子:增量之前使用该值。
所以,如果你这样做,从函数返回的值是递增的。
本教程将增加对象本身,但返回该对象的未增加的COPY。
你实施的是预先增量。 – trutheality 2011-06-16 16:43:17