刚开始学C语言时,increment的前缀形式++i有时叫做“增加然后取回”,后缀形式i++叫做“取回然后增加”。
但是for循环里我们看到有用i++,也有用++i,执行效率有什么区别吗?
来看下increment的定义
// 前缀形式:增加然后取回值
UPInt& UPInt::operator++()
{
*this += 1; // 增加
return *this; // 取回值
}
// postfix form: fetch and increment
const UPInt UPInt::operator++(int)
{
UPInt oldValue = *this; // 取回值
++(*this); // 增加
return oldValue; // 返回被取回的值
}
- 后缀操作符函数没有使用它的参数,它的参数只是用来区分前缀与后缀函数调用。
- 后缀操作要多生成一个局部对象oldValue,然后调用前缀操作,因此执行速度比前缀操作慢,对循环控制变量i,要养成写++i、不写i++的习惯。
- const 关键词修改后缀操作的返回值,是为了保持与int类型一致,避免出现i++++这种操作
-
- 首先int不支持i++++;
-
- 其次,第二次进行++时已经不是原始对象的值,而是第一次调用的返回值,这样会导致++对原始对象操作一次,对返回值操作一次,不符合我们的直觉。