MyClass MyClass::operator++(int) {
return ++(*this);
}
这是我写的代码。我工作正常,但所有教程都说我必须创建一个临时对象并将其返回:
MyClass MyClass::operator++(int) {
MyClass tmp = *this;
++(*this);
return tmp;
}
请告诉我哪种方式最好?
答案 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 。