为什么自增(increment)运算符的 前置(prefix) 比 后置(postfix) 效率高?
2010-11-07 18:16
357 查看
先看一段代码:
输出结果为:
num1 = 2
num2 = 2
sum1 = 2
sum2 = 1
原理: 前置运算符,先将自身递增,然后返回自身;
后置运算法,先创建自身的一个副本,而后自身递增,然后返回副本。
正如上例代码:
sum1 = ++num1; --> num1先自增本身,值变为2,再返回本身,sum1即被赋值为2;
此时,num1 = 2, sum1 = 2。
sum2 = num2++; -->num2先创建自身副本(假设为tmp),tmp = num2,然后num2自增,
值变为2,返回副本tmp,sum2即被赋值为1;
此时,num2 = 2, sum2 = 1。
再来看一看运算符的重载,更加一目了然。
#include <iostream> using namespace std; int main() { int num1 = 1, num2 = 1; int sum1, sum2; sum1 = ++num1; sum2 = num2++; cout << "num1 = " << num1 << endl << "num2 = " << num2 << endl << "Sum1 = " << sum1 << endl << "Sum2 = " << sum2 << endl; return 0; }
输出结果为:
num1 = 2
num2 = 2
sum1 = 2
sum2 = 1
原理: 前置运算符,先将自身递增,然后返回自身;
后置运算法,先创建自身的一个副本,而后自身递增,然后返回副本。
正如上例代码:
sum1 = ++num1; --> num1先自增本身,值变为2,再返回本身,sum1即被赋值为2;
此时,num1 = 2, sum1 = 2。
sum2 = num2++; -->num2先创建自身副本(假设为tmp),tmp = num2,然后num2自增,
值变为2,返回副本tmp,sum2即被赋值为1;
此时,num2 = 2, sum2 = 1。
再来看一看运算符的重载,更加一目了然。
class A { public: A& operator++(); //前置版本(prefix version) A operator++(int); //后置版本(postfix version) private: int num; } inline A& A:: operator++() { num += 1; return *this; } inline A A:: operator++( int ) { A tmp = *this; //创建副本 num += 1; //自身增加 return tmp; //返回副本 }
相关文章推荐
- 为什么自增(increment)运算符的 前置(prefix) 比 后置(postfix) 效率高?
- 读书笔记: More Effective ++ 操作符 条款6,区别increment/decrement操作符的前置(prefix)和后置(postfix)的形式
- 区别increment/decrement操作符的前置(prefix)和后置(postfix)形式
- 区别increment/decrement操作符的前置(prefix)和后置(postfix)形式
- 【M6】区别increment/decrement操作符的前置(prefix)和后置(postfix)形式
- 6. 区别increment/decrement操作符的前置(prefix)和后置(postfix)形式
- 6. 区别increment/decrement操作符的前置(prefix)和后置(postfix)形式
- More Effective C++ 条款6 区别 increment/decrement 操作符的前置(prefix)和后置(postfix)形式
- 前置++为什么比后置++效率高
- 前置和后置操作符的区别(More Effective_C++_6(运算符))
- 前置和后置运算符
- 前置++为什么比后置++效率高
- ++前置,后置++ 汇编角度效率比较
- 前置++为什么比后置++效率高
- 前置运算符和后置运算符的区别
- Java的前置++和后置++效率对比
- 《More Effective C++》学习心得(五) 前置和后置自增运算符
- 重载流插入和前置与后置自增运算符
- 重载前置,后置(自增运算符 ++ 和自减运算符 --)
- 前置运算符与后置运算符的区别