人生的过程,不断学习、不断向前迈进的过程

C++中重载和使用增量运算符(++)时应注意的事

假如a为int类型,初始值为10。经过++(++)a和(a++)++后的值为多少呢?我想很多人应该会回答是14。错了,应该为13。而且可能编译通不过。因为前递增运算(++a)返回的是对象引用,而后递增运算(a++)采用值返回。这样的话(a++)++就是错误的了,因为a++返回的不是左值,不能再进行递增运算。

 我们编写类时,重载(++)时就得编写两个重载函数了,因为运算符函数的前缀形式和后缀形式不同。这时候要如何区分呢?我们可以在后递增运算符重载函数的中多加如一个int标识,这个标识仅起到区分作用,没有实际作用的。例如,用任意类object重载++的函数声明如下:

 class object{

 public:

 object& operator++();

 const object operatoor++(int);

};

 前缀形式一般要求返回的当前对象递增后的引用。

 对于后缀形式,先在修改之前创建原对象的副本,再返回执行递增后的原对象的副本。后缀运算符的返回值声明为const,可阻止编译theobject++++这样的表达式。这种表达式会与运算符的一般形式混淆,产生不一致。但是,如果不把返回类型声明为const,这种用法就是允许的。

没有评论:

发表评论