尼采般地抒情

尼采般地抒情

尼采般地抒情

音乐盒

站点信息

文章总数目: 321
已运行时间: 1782

前言:for循环里面的i++和++i在平时使用感觉是几乎一样的,但是之前写代码,特别是数据结构课程学链表那会,经常需要做的就是一个节点的next指向什么才结束这样一种情况,当时总是不自觉地将i++调整为++i就能运行成功,这个点比较模糊,查资料才发现存在只有++i可以返回左值这一情况。



先来一段常规使用:

这个没有相关的差别


一个返回+之前的值一个返回+之后的值,也是字面理解。


左值:在内存存储空间里面有确定的存储地址的值。

判断是否为左值:看是否允许取地址&运算符获得对应的内存地址。

++i可以返回左值,i++不可以。(下面的截图对i++报错,对++i没有报错)


i++和++i的实现:

// 前缀形式:++i
int& int::operator++() //这里返回的是一个引用形式,就是说函数返回值也可以作为一个左值使用
{//函数本身无参,意味着是在自身空间内增加1的
  *this += 1;  // 增加
  return *this;  // 取回值
}

//后缀形式:i++
const int int::operator++(int) //函数返回值是一个非左值型的,与前缀形式的差别所在。
{//函数带参,说明有另外的空间开辟
  int oldValue = *this;  // 取回值
  ++(*this);  // 增加
  return oldValue;  // 返回被取回的值
}


从这个代码也可以看出++i的效率是优于i++的,尽管很微弱。


大多数编译器已经对这两种使用方式封装,使其普通使用的效果几乎一致。


今后尽量使用++i,特别是C++写题的时候。



参考链接:

评论区

什么都不舍弃,什么也改变不了