分类: C/C++
2009-04-04 00:16:08
参考自《More Effective C++中文版》
当我们要设计一个类,并且对该类进行increment/decrement操作符重载时,必须遵循一个重要法则:一旦有顾虑,试看int类型行为如何并遵循之。我们在重载操作符时,要使其行为尽量地与编译器为之提供的靠拢,包括任何细节。
increment操作符的前置式(prefix)意义:"increment and fetch"(累加后取出),后置式(postfix)意义:"fetch and increment"(取出后累加)。
如下设计一个类:
|
为什么要这么做呢?
前置式,返回reference无多大问题,当然你也可以返回一个临时对象,但何必多此一举呢!
后置式,为什么要返回一个const object呢?
可以试着编译以下两行代码:
int i = 0;
i++++; //error C2105: '++' needs l-value
(注意:++++i是合法的)
内建的int类型无此行为,这是后置式返回const object的原因之一。
还有一个原因,如下:
UPInt i;
i++++; // 等同于 i.operator++(int).operator++(int);
即使能够两次施行后置式increment操作符,其行为也非你所预期。仔细看会发现:第二个operator++(int)所改变的是第一个operator++(int)返回的对象,而不是原对象,因此i只被累加一次而已。
对于decrement操作符同increment操作符行为上一致。