尼采般地抒情

公告栏

此网站主题为本人手写主题,主题还在开发中……


作者:尼采般地抒情

站点信息

文章数目:257
已运行时间:
目录

尼采般地抒情

尼采般地抒情

公告栏

此网站主题为本人手写主题,主题还在开发中……


作者:尼采般地抒情

站点信息

文章数目:257
已运行时间:

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


先来一段常规使用:
image.png
这个没有相关的差别

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

左值:在内存存储空间里面有确定的存储地址的值。
判断是否为左值:看是否允许取地址&运算符获得对应的内存地址。

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

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++写题的时候。

参考链接:

评论区

Beaudar Twikoo

最新评论

Loading...