What is the difference between operator++ () and operator++ (int)?
我有我老师编写的程序中的这些行代码:
1 2 3 4 5 6 7 8 9 | TimeKeeper& operator++() { d_seconds++; return *this; } const TimeKeeper operator++(int) { TimeKeeper tk(*this); ++(*this); return tk; } |
老师问我们的一个问题是:"operator++()返回一个引用,operator++(int)返回一个值,解释为什么?"
有人能给我解释一下吗??如果你需要剩下的代码,我不介意放在上面!谢谢!!
举个简单的例子:
1 2 3 4 5 6 | int x = 1; std::cout << x++ <<" "; // prints 1 std::cout << ++x <<" "; // prints 3 |
在第二个语句中,
不带额外
1 2 3 | TimeKeeper keeper; ++keeper; // pre increment: calls TimeKeeper::operator++() keeper++; // post increment: calls TimeKeeper::operator++(int) |
预增量和后增量的区别在于,对于预增量,表达式的值在增量之后,而对于后增量,表达式的值在表达式之前。对于后增量,将应用增量的对象向前移动,而另一个对象表示返回增量之前的状态。表示前一状态的对象是一个临时对象,它只存在于表达式中,因此需要按值返回。对于预增量,只涉及一个值,可以通过引用立即返回该值。
在上面的代码片段中,没有使用来自
要区分这两个运算符,必须有一些语法差异。为了区分后增量运算符和预增量运算符,在后增量运算符的声明中添加了一个类型为int但未使用的参数。preincrement运算符返回对象本身。这就是它的返回类型A引用的原因。postIncrement运算符返回临时对象并递增原始对象。这就是它返回值的方式。