首页 > 其他分享 >「实用」让你彻底搞定i++与++i的区别

「实用」让你彻底搞定i++与++i的区别

时间:2024-05-06 19:00:12浏览次数:22  
标签:搞定 变量 区别 ++ 代码 mov 实用 int

i++与++i单独用时的效果是一模一样的,但是如果突然要你说他们俩的区别,你又能不能回答上来呢?这篇博文,我们就完全弄懂他们俩兄弟的区别!

基本概念

i++和++i要是单独使用的话效果是一样的,都是i=i+1,实验证明:
i++ 代码:

#include<bits/stdc++.h>
using namespace std;
int main(){
    int i = 0;
    i++;
    cout << i;
    return 0;
}

i++ 运行结果:

1

++i 代码:

#include<bits/stdc++.h>
using namespace std;
int main(){
    int i = 0;
    ++i;
    cout << i;
    return 0;
}

++i 运行结果:

1

区别

方法1:测试

我们假设一个变量是a,那么a=i++与a=++i的运行结果就不太一样了,我们分别说明
i++:
i++其实就是先干活后吃饭,这里的干活就是指被赋值到变量a的上面,吃饭就是自增1
++i:
++i和i++相反,即先吃饭后干活,先执行的是i=i+1,再被赋值到变量a中
这里给大家准备了一个比较好理解的图片:

我们依然以一个实验来证明:

代码:

#include<bits/stdc++.h>
using namespace std;
int main(){
	int i = 3;
	cout << "This is i++:\n";
	int a1 = i++;
	cout << "i:" << i << " a:" << a1 << "\n";
	cout << "This is ++i:\n";
	i = 3;
	int a2 = ++i;
	cout << "i:" << i << " a:" << a2 << "\n";  
	return 0;
} 

运行结果:

This is i++:
i:4 a:3
This is ++i:
i:4 a:4

方法2:看汇编代码

汇编代码这里就不给大家截图了,大家可以自己去试一试

i++先是3次mov(移动),然后才add(增加),最后再来一次mov,而++i先1次mov,接着直接自增,最后再3次mov

效率

之前我做过一个实验,也就是看控制台下方的时间,结果就是++i比i++要稍快一些,但是这两段代码的区别不大,要是极度追求效率,推荐++i

那么这是为什么呢?

回到他们俩之间的区别,a = i++时a为3,其实这个3在一些人的理解中并不是原先的i,而是i++时生成的一个临时变量,这个临时变量的生成拖延了i++的时间,而++i就是直接干脆利落的i+=1,并没有其他什么麻烦的操作

这个结论在基本编程中没有太多应用,但是在自定义类型中,应该尽量使用快一点的++i

最后,如果这篇博客对你有帮助,请您帮我点个推荐,谢谢!

标签:搞定,变量,区别,++,代码,mov,实用,int
From: https://www.cnblogs.com/charzie-blog/p/18175671

相关文章

  • 「实用」这几个写注释的方法,你一定要看一看
    前言大家好,我是Charzie,欢迎来到我的博客,今天这篇文章,我门来谈一谈如何写C++的注释以及应该避免那些写注释的方法C++注释详解在C++编程中,注释是一个非常重要的工具,它可以帮助我们理解代码的功能、逻辑和目的。通过添加注释,我们可以让其他开发者更容易地阅读和理解我们的代码,也可......
  • c++中文编码问题
    std::string或者constchar*,本质上都是二进制,不包含编码属性,其编码信息来源于赋值语句,QString以utf16编码,默认构造或赋值的字面量假定为utf8,若是其它编码比如ansi,可以调用QString::fromLocal8bit一、字面量的编码取决于文件,即如果在c++源文件中有直接赋值1)、constchar*s="......
  • 22. 括号生成-c++
    数字n代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且有效的括号组合。示例1:输入:n=3输出:["((()))","(()())","(())()","()(())","()()()"]示例2:输入:n=1输出:["()"]classSolution{public:vector<string>generat......
  • 39. 组合总和-c++
    给你一个无重复元素的整数数组candidates和一个目标整数target,找出candidates中可以使数字和为目标数target的所有不同组合,并以列表形式返回。你可以按任意顺序返回这些组合。candidates中的同一个数字可以无限制重复被选取。如果至少一个数字的被选数量不同......
  • C++内存分布
    内存分布典型的C/C++内存表示有以下几部分构成Textsegment,存放代码段和只读常量的区域Initializeddatasegment,通常叫做数据段,已经初始化的静态变量和全局变量存放的区域,如staticinti=5、全局变量intj=10都存放在数据段Uninitializeddatasegment(bss),未初始化的静......
  • 78. 子集-c++
    给你一个整数数组nums,数组中的元素互不相同。返回该数组所有可能的子集(幂集)。解集不能包含重复的子集。你可以按任意顺序返回解集。示例1:输入:nums=[1,2,3]输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]示例2:输入:nums=[0]输出:[[],[0]]classSolution{......
  • c++
    namespace命名空间我们为了防止由于定义了多个函数名,导致可能函数名重复的问题,我们创建了命名空间,为的就是区分函数名重复的问题当我们要调用某个命名空间中的函数时,我们可以直接namespace::function来进行直接调用,同时可以存放变量名,函数,再一个命令空间.....同时假如命名空间......
  • C++学习笔记
    参考https://github.com/weidongshan/cpp_projects《C++PrimerPlus》C++StandardsSupportinGCCGCCGCC中有libstdc++库的实现LLVMLLVM中有libc++库的实现面向对象编程的3大特点封装继承多态struct声明的类里的成员都是publicclass声明的类的成员都是pr......
  • c++综合实验报告友元
    综合性、设计性实验报告专业:计算机科学与技术 一、实验目的:1.熟练掌握友元函数和友元类设计的方法2.掌握友元函数的含义,友元函数和成员函数的区别。3.掌握友元类的含义。二、实验仪器或设备:微型计算机三、总体设计(设计原理、设计方案及流程等)实验内容:定义Student类和Sco......
  • 快速入门一篇搞定RocketMq-实现微服务实战落地
    1、RocketMq介绍RocketMQ起源于阿里巴巴,最初是为了解决邮件系统的高可靠性和高性能而设计的。在2016年开源分布式消息中间件,并逐渐成为Apache顶级项目。现在是Apache的一个顶级项目,在阿里内部使用非常广泛,已经经过了"双11"这种万亿级的消息流转,性能稳定、高效。官网地址:https://......