c/c++中的i++和++i的区别
使用 i++ vs. ++i
i++是先赋值再加1
++i是先加1再赋值
到目前为止,你已经学习了如何编写下面这样的 C++ for 循环:
for (int i = 0; i < 10; i++) {}
这条语法同 Python 的 for 循环语法十分相似;然而,你也可以这样编写 for 循环:
for (int i = 0; i < 10; ++i) {}
这两者之间有什么区别?为什么它们都可以运行?
事实上,i++ 和 ++i 都会带来同样的结果;这些都是 i=i+1 的缩写形式,它们之间的区别也十分微妙。
int i = 5;
int x = i++; // x = 5, i = 6 (called postfix)
int x = ++i; // x = 6, i = 6 (called prefix)
在两种情况中,i 变量都增加了 1。在后缀式 i++ 的情况中,先计算了int x = i,再出现了 i=i+1。
而在前缀式 ++i 的情况中,i = i + 1 先出现,再执行了 int x = i。
相比 i++,许多代码指南更推荐使用 ++i。在实际操作中,当使用整数变量时,两者的效率相同。
然而,当你编写一个重载 ++ 运算符的 C++ 类时,这两者之间又有一些差别。在 Python 矩阵项目中你见过了操作重载,其中代码重载了数学符号来进行矩阵加法、减法、乘法,等等。
重载后缀式运算符时,C++ 需要记录两个值。在例子中,记录的值是 5 和 6。而对于前缀式运算符而言,C++ 只需要记录一个值:6。因此,当重载 ++ 运算符时,使用前缀式运算符比后缀式更加高效。
c/c++中的i++和++i的区别的更多相关文章
- JDBC中的Statement和PreparedStatement的区别
JDBC中的Statement和PreparedStatement的区别
- LINQ语句中的.AsEnumerable() 和 .AsQueryable()的区别
LINQ语句中的.AsEnumerable() 和 .AsQueryable()的区别 在写LINQ语句的时候,往往会看到.AsEnumerable() 和 .AsQueryable() .例如: s ...
- JavaScript中const、var和let区别浅析
在JavaScript中有三种声明变量的方式:var.let.const.下文给大家介绍js中三种定义变量的方式const, var, let的区别. 1.const定义的变量不可以修改,而且必须初始 ...
- 【前端】js中new和Object.create()的区别
js中new和Object.create()的区别 var Parent = function (id) { this.id = id this.classname = 'Parent' } Pare ...
- SQL Server中Text和varchar(max)数据类型区别
SQL Server中Text和varchar(max)数据类型区别 以前只知道text和image是可能被SQL Server淘汰的数据类型,但具体原因不太清楚,今天读书的时候发现了text与v ...
- 简单理解Struts2中拦截器与过滤器的区别及执行顺序
简单理解Struts2中拦截器与过滤器的区别及执行顺序 当接收到一个httprequest , a) 当外部的httpservletrequest到来时 b) 初始到了servlet容器 传递给一个标 ...
- c++中的引用与指针的区别
http://blog.csdn.net/lyd_253261362/article/details/4323691 c++中的引用与指针的区别 ★ 相同点: 1. 都是地址的概念: 指针指向一块内存 ...
- Oracle中执行存储过程call和exec区别
Oracle中执行存储过程call和exec区别 在sqlplus中这两种方法都可以使用: exec pro_name(参数1..); call pro_name(参数1..); 区别: 1. 但是e ...
- 表单提交中get和post方式的区别
表单提交中get和post方式的区别有5点 1.get是从服务器上获取数据,post是向服务器传送数据. 2.get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一 ...
- 解析sql语句中left_join、inner_join中的on与where的区别
以下是对在sql语句中left_join.inner_join中的on与where的区别进行了详细的分析介绍,需要的朋友可以参考下 table a(id, type):id type ---- ...
随机推荐
- 微信小程序里实现跑马灯效果
在微信小程序 里实现跑马灯效果,类似滚动字幕或者滚动广告之类的,使用简单的CSS样式控制,没用到JS wxml: <!-- 复制的跑马灯效果 --> <view class=&quo ...
- Qt:打印输出到控制台,类似C++的cout
1. #include<qDebug> 2. qDebug<<"Hello,world!"; 补充,如果不是控制台文件,比如是窗口应用程序,需要在pro文件 ...
- .NET Core WebApi使用Swagger
1.新建Core Api项目,引用Swashbuckle.AspNetCore 包 配置Startup.cs类的 using System; using System.Collections.Gene ...
- JavaWeb-数据库基础
数据库基础 推荐阅读: 数据库:https://www.cnblogs.com/zwtblog/tag/数据库/ 数据库是学习JavaWeb的一个前置,只有了解了数据库的操作和使用,我们才能更好地组织 ...
- 用Vue编写一个简单的仿Explorer文件管理器
大家一定很熟悉你桌面左上角那个小电脑吧,学名Windows资源管理器,几乎所有的工作都从这里开始,文件云端化是一种趋势.怎样用浏览器实现一个Web版本的Windows资源管理器呢?今天来用Vue好好 ...
- 配置DHCP Relay的功能原理是什么?
DHCP中继代理,就是在DHCP服务器和客户端之间转发DHCP数据包.当DHCP客户端与服务器不在同一个子网上,就必须有DHCP中继代理来转发DHCP请求和应答消息.DHCP中继代理的数据转发,与通常 ...
- CSS学习Day01
1.什么是CSS 如何学习 CSS是什么 CSS怎么用 CSS选择器(重点+难点) 美化网页(文字.阴影.超链接.列表.渐变) 盒子模型 浮动 定位 网页动画(特效效果) 1.1什么是CSS Casc ...
- .NET 6学习笔记(2)——通过Worker Service创建Windows Service
通过Visual Studio中的Windows Service模板,我么可以创建.NET Framework版本的Windows Service,网络上对此已有详细且丰富的各路教程.但在我们升级到. ...
- 说说如何安装 Openfire
Openfire 是一个基于 XMPP 协议的 IM 服务框架.这里我们来说一说如何安装它. 1 下载 zip 安装包 首先下载 Openfire 安装包,下载路径为:http://www.ignit ...
- OAuth2和JWT - 如何设计安全的API?
JWT和OAuth2比较? 要比较JWT和OAuth2?首先要明白一点就是,这两个根本没有可比性,是两个完全不同的东西. JWT是一种认证协议 JWT提供了一种用于发布接入令牌(Acce ...