C++中前置++和后置++的详细讲解

参考链接(链接讲的很全):C++前置++和后置++的区别

对于迭代器和其他模板对象使用前缀形式 (++i) 的自增, 自减运算符.,理由是 前置自增 (++i) 通常要比后置自增 (i++) 效率更高

class Age   
	{   
	public:   
	  
	    Age& operator++() //前置++   
	    {   
	        ++i;   
	        return *this;   
	    }   
	  
	    const Age operator++(int) //后置++   
    {   
	        Age tmp = *this;   //tmp是一个临时对象,会造成一次构造函数和一次析构函数的额外开销。
	        ++(*this);  //利用前置++   
	        return tmp;   
	    }   
	  
	    Age& operator=(int i) //赋值操作   
	    {   
	        this->i = i;   
	        return *this;   
	    }   
	  
	private:   
	    int i;   
	}; 

1.返回值类型的区别

前置++的返回类型是(引用)Age&,后置++的返回类型const Age(临时对象)。这意味着,前置++返回的是左值,后置++返回的是右值。

2.形参的区别
前置++没有形参,而后置++有一个int形参,但是该形参也没有被用到。很奇怪,难道有什么特殊的用意?
其实也没有特殊的用意,只是为了绕过语法的限制。
前置++与后置++的操作符重载函数,函数原型必须不同。否则就违反了“重载函数必须拥有不同的函数原型”的语法规定。

3.代码实现的区别
前置++的实现比较简单,自增之后,将this返回即可。需要注意的是,一定要返回this。
后置++的实现稍微麻烦一些。因为要返回自增之前的对象,所以先将对象拷贝一份,再进行自增,最后返回那个拷贝。

4.效率的区别
C++中前置++和后置++的详细讲解_第1张图片

你可能感兴趣的:(C++/C基础知识点,c++)