简述前缀运算符与后缀运算符

来源:互联网 发布:java获取本机端口号 编辑:程序博客网 时间:2024/05/18 18:42
对于初学者,经常纠结的一个问题就是 for 循环中的循环量递增过程中,到底是应该用前缀运算符还是后缀运算符。

  • 逻辑
首先谈一下前缀运算符和后缀运算符有什么区别:粗略的讲,
    • a++是当前值计算表达式,然后将变量a的值+1;
    • 而++a是先将a的值+1,然后使用新的值来计算表达式。
(这里涉及到表达式和语句、副作用和顺序点,有点复杂,暂时不在这里阐述。)
在大多数情况下(一个正常的软件工程规定的程序设计规范和风格,应该是尽量避免那种考题式的容易含糊的语句,应该尽量使用意思明确,即:一条语句实现一个功能)是没有区别的,就逻辑上来说,for 循环中,使用前缀运算符和后缀运算符所得的结果都是一样的,但是这里涉及到一个重要的问题:效率!!!

  • 效率
我们在设计程序时,应当尽量减少程序的开销,在能够使用较少内存的地方,绝不去占用多的内存,这样可以提高程序的执行速度。
对于内置类型和当代的编译器而言,这没有多大差别。但是一旦涉及到程序员自定义的类类型时,就会体现出很大差别。(C++允许程序员重定义运算符,称之为运算符重载),如果把一个占用内存较大的类作为循环量对其使用递增(递减)运算符时,我们就应当使用前缀运算符++a(--a)。
原因如下:
    • 前缀运算符:(程序员自定义)将值+1,然后返回结果;
    • 后缀运算符:首先复制一个副本,将其值+1,然后将复制的副本返回。
很明显能看出两者之间的差别吧。

所以,在程序设计时,应该养成使用前缀运算符的习惯,在C++软件工程中,经常会涉及到较大的类类型需要重载运算符,在不产生歧义的情况下,尽量使用前缀运算符能够帮助我们提高程序的执行速度。
0 0