重载后增量运算符

时间:2011-06-16 16:40:38

标签: c++

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

这是我写的代码。我工作正常,但所有教程都说我必须创建一个临时对象并将其返回:

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

请告诉我哪种方式最好?

4 个答案:

答案 0 :(得分:6)

第一个版本错误,因为它返回新值。 postincrement运算符应该返回旧值。

答案 1 :(得分:5)

第二个! Post Increment意味着在计算表达式后变量会递增。

简单示例:

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

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

您的第一个示例会生成j = 11,这是不正确的。

答案 2 :(得分:2)

教程是正确的。

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

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

答案 3 :(得分:0)

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

后增量运算符:使用增量 AFTER

预增量运算符:使用增量 BEFORE

因此,如果你按照自己的方式进行操作,函数返回的值就是递增的值。

教程会增加对象本身,但会返回对象的非增量 COPY