++i 与 i++
程序员文章站
2024-02-09 17:25:10
...
++i 与 i++ 的本质区别是
++i 操作除 i 之外不涉及新的(隐含的)操作数,而 i++ 则在 i 之外还涉及另一个新的(隐含的)操作数。这个隐含的参数是为了重载区别两个操作符。
效率差别:
如果只是对内建数据类型(如int),两者的差别很小,基本上没有,这个可以从汇编代码上看出来。
但是如果对于C++里的类,那++i和i++两个是运算符重载,它们的区别就比较明显了:
i++和++i的 最重要的区别大家都知道就是 +1和返回值的顺序, 但,两这还有一个区别(在C++中)就是i++在实现的时候,产生了一个local object。
实例
在C++中,简单类型的i++和++i与C相同。但由于在C++中可以重载运算符,所以在实现新的类型对象时重载i++和++i操作与C不同。
#include <iostream>
using namespce std;
class Test
{
public:
// ++i, 返回引用
Test& operator++()
{
*this + = 1; // 先加1
return *this; // 返回加1后的值
}
// i++, 返回值
Test operator++(int)
{
Test old = *this; // 保存旧值
++(*this); // 再加1
return old;
}
};
从上面的++i与i++的实现看出,在C++中,对于非内建类型来说,前自增运算(++i)返回的是对象的引用,而后自增运算返回的是对象,返回对象将造成成拷贝构造函数更多的调用,所以++i的效率要高于i++。但是对于内建类型,i++与++i的效率几乎没有区别(因为内建类型没有拷贝构造函数)。于此类似的是i--和--i。(注:因为后自增运算返回的是const型对象因此后自增运算不能做左值)。
上一篇: 软件构造Lab3心得体会
下一篇: session存储的替代方法redis