从重载自增操作符上理解前自增与后自增

对C++新手来说,对前自增和后自增操作符可能会有一些困惑,下面从重载自增操作符角度进行理解分析:

class String
{
public:
String(char const *chars="");
String(String const &str);          //以下只显示了前自增和后自增重载函数,省略了构造函数等。
char& operator[](std::size_t index) ;
void display() const;
String & operator++();   //前加加
String const operator++(int);   //后加加
private:
char* ptrchars;
};
////////////////////////////////////////////////////////////////前自增
String &String::operator++()
{
for(size_t i=0;i<strlen(ptrchars);i++)
{
++ptrchars[i];
}
return *this; //返回的是自增操作后的原对象
}
///////////////////////////////////////////////////////////////////后自增
String const String::operator++(int)
{
String copy(*this);
++(*this);
return copy; //返回的是原对象的副本,但是原对象已经自增
}

示例1:

String str("abcd");
str.display();
String str1(str++);
str1.display();

结果:
abcd
abcd

分析:String str1(str++);先进行了后自增,返回了原对象副本,然后赋值给了str1。

///

示例2:

String str("abcd");
str.display();
String str2(++str);
str2.display();

结果:
abcd
bcde

分析:String str2(++str);先进行了前自增,返回了自增后的对象,然后赋值给了str2。

///

示例3:

String str("abcd");
++str;
str.display();

str++;
str.display();

结果都是bcde

分析:从后自增重载函数中 ++(*this); 可以看到原对象自增了。

///

总结:

示例3与示例1,2不同的是,它没有进行赋值操作,后自增此时执行效果等同于前自增,它们的结果是一样的,只有在有赋值的时候才显示出两者的不同。另外,此时后自增比前自增多了一个保存原操作数的操作,开销更大,所以程序中在相同情况下往往使用前自增操作,省掉操心性能差异的问题。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值