MoreEffectiveC++:自增和自减

MoreEffectiveC++:自增和自减,第1张

MoreEffectiveC++:自增和自减,第2张

很久以前(80年代),还没有办法区分++和--运算符的前缀和后缀调用。程序员抱怨这个问题,所以C++语言被扩展以允许重载增量和减量操作符。

然而,有一个语法问题。重载函数之间的区别取决于其参数类型的不同,但递增或递减的前缀和后缀都只有一个参数。为了解决这个语言问题,C++规定后缀形式有一个int类型的参数。调用函数时,编译器将0值作为int参数传递给函数:

class UPInt {//" unlimited precision int "
public:
UPInt & operator++();//++前缀
const UPInt 运算符++(int);//++后缀
upint & operator-();//-前缀
const upint运算符-(int);//-后缀
UPInt & operator+=(int);//+=运算符,up int
//]/和int
...
};

UPInt I;

++ I;//调用I . operator++();
i++;//调用I . operator++(0);
-I;//调用I . operator-();
I-;//调用I . operator-(0);

这个规范有些奇怪,但是你会习惯的。特别需要注意的是,这些运算符的前缀和后缀返回值类型是不同的。前缀返回一个引用,后缀返回一个常量类型。接下来,我们将讨论++运算符的前缀和后缀形式。这些指令还使用AND运算符。

从你开始做C程序员的那一天起,你就记住了,增量的前缀形式有时叫做“加然后取”,后缀形式叫做“取然后加”。这两句话非常重要,因为它们是增量前缀和后缀的形式规范。

//前缀形式:添加然后检索值

UPInt & UPInt::operator++()
{
* this+= 1;//Add
return * this;//检索值
}

//后缀形式:获取和递增

const UPInt UPInt::operator++(int)
{
UPInt old value = * this;//检索值
++(* this);//add
返回oldValue//返回检索到的值
}

后缀运算符函数不使用其参数。它的参数仅用于区分前缀和后缀函数调用。如果你在函数中不使用参数,很多编译器会显示警告信息,这是很烦人的。为了避免这些警告消息,一种常见的方法是省略不想使用的参数名。

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » MoreEffectiveC++:自增和自减

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情