C++ 中前置 ++ 与后置 ++ 是不同的,具体不同,下面代码中有体现。在后置 ++ 里,人为添加一个参数(int),主要是为了区别前置 ++,这个参数不会被使用。这里的 int 是个哑元。一个函数的参数只有类型没有名字,则这个参数称之为哑元。

class A
{
public:
	A& operator++()// 前置 ++,返回的是引用
	{
		data += 1;
		return *this;
	}
	const A operator++(int)// 后置 ++,返回的是值
	{
		A old(*this);
		++(*this);	// 调用前置 ++
		return old;
	}
// 从代码可以看出,前置 ++ 比后置 ++ 效率高,不用产生临时对象,不用调用拷贝构造函数
	int data;
};

ostream& operator<<(ostream& os, A& a) {
	os<<a.data<<endl;
	return os;
}

int main() {
	A a={1};
	cout<<a;//1
	A b=++a;
	cout<<b;//2
	cout<<a;//2
	A c=a++;
	cout<<c;//2
	cout<<a;//3

	return 0;
}