关于前++和后++的区别,其实 很多人都清楚,比如 你知道i++是先用i,然后在让i+1,然后++i是先对i+1,然后在去使用i。
好了,这就是他们简单的区别了,但是 实际上,i++调用了++i。
说了这么多i++和++i,我想你都应该头晕了,给一个例子吧
#include <iostream>
class A{
int i;
public:
A operator ++() //前++
{
i=i+1;
return *this;
}
A operator ++(int) //后++
{
A t=*this; //先保存一份变量
++(*this); //调用前++
return t;
}
};
int main(int argc, const char * argv[])
{
A a;
a++;
return 0;
}
因为我不知道怎么重载int的++,所以只能写一个类这样了,所以 你会看到在main函数中调用很奇怪
这里,我写了一个类A,重载了两个++,一个多了一个参数int,那么 我告诉你 多一个int的那个就是你熟悉的 i++(后++),而没有参数的 就是 前++。
我们逐行分析这个代码,第一个operate是前++,他做了一件事情,吧自己的private变量i+1了,然后返回*this,你可能会疑惑 *this是什么,实际上就是一个 A的实例变量
接下去我们看 第二个operate,也就是后++,他做了3件事,第一件 保存一份this,也就是相当于把this拷贝一份,把里面的数据都拷贝一次给一个新的变量叫做t,然后this去调用前++,这样吧this的i加1,之后return的是t,也就是return的是那个被拷贝的那一份
好了,到了这里 如果你还不明白,我用更简单的语言写出来了,耐心读下去
int operator++() //前++
{
i=i+1;
return i;
}
int operator++(int) //后++
{
int t=i;
++i;
return t;
}
这份代码和上面的代码几乎差不多(但是 这是个不能编译通过的,只是方便去理解),但是是你熟悉的那一个代码i++和++i,你再后++发现了么,第二行 他调用了++i,然后返回的是之前的一个变量
好了 到了这里 你应该明白了这两个的区别,很显然,++i的效率比i++高(因为i++调用了++i),但是 以现在编译器的水平。。。这两个效率已经一样了,所以 放心大胆的去用吧