C++中为什么++i比i++高效

开发者福利!热门AI工具限时免费用 购周边即赠Coding Plan Lite,Claude Code、Cursor等20+工具畅享,效率翻倍! 阅读详情

i++ 与 ++i 的主要区别有两个:
1、 i++ 返回原来的值,++i 返回加1后的值。
2、 i++ 不能作为左值,而++i 可以。

毫无疑问大家都知道第一点(不清楚的看下下面的实现代码就了然了),我们重点说下第二点。
首先解释下什么是左值(以下两段引用自中文维基百科『右值引用』词条)。

左值是对应内存中有确定存储地址的对象的表达式的值,而右值是所有不是左值的表达式的值。

一般来说,左值是可以放到赋值符号左边的变量。但

能否被赋值不是区分左值与右值的依据。比如,C++的const左值是不可赋值的;而作为临时对象的右值可能允许被赋值。 左值与右值的根本区别在于是否允许取地址&运算符获得对应的内存地址。

比如,

int i = 0;
int *p1 = &(++i); //正确
int *p2 = &(i++); //错误

++i = 1; //正确
i++ = 5; //错误


那么为什么『i++ 不能作为左值,而++i 可以』?
看它们各自的实现就一目了然了:
以下代码来自博客:为什么(i++)不能做左值,而(++i)可以

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

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



 

C++中的自增运算符:++i 和 i++ C++中的自增运算符:++i 和 i++C++编程中,自增运算符是一种常用的操作符。其中 ++i 和 i++ 就是两种不同的自增运算符。 阅读详情

相关推荐

数字后端零基础入门系列 | Innovus零基础LAB学习Day9

数字后端零基础入门系列 | Innovus零基础LAB学习Day9

weixin_37584728的博客 4432

i++++i的区别

***i++ 先赋值在运算,例如 a=i++,先赋值a=i,后运算i=i+1,所以结果是a==1 ++i 先运算在赋值,例如 a=++i,先运算i=i+1,后赋值a=i,所以结果是a==2*** package 剑指offer; public class test { public static void main(String[] args) { int i = 0; while(i<=10){ System.out.println

qq_44182694的博客 224

轨道平面系与轨道姿态系

文章摘要: 轨道平面系与轨道姿态系是航天任务中两个核心坐标系。轨道平面系(惯性系)以地心为原点,Z轴沿轨道角动量方向,用于轨道确定和机动规划;轨道姿态系(如LVLH系)以航天器质心为原点,Z轴指向地心,用于姿态控制和对地观测。两者通过旋转矩阵相互转换:轨道平面系基于轨道根数构建,保持静态;而LVLH系随轨道运动连续旋转。前者适用于全局轨道分析,后者支撑局部任务执行。理解二者的定义差异(原点、基准轴、惯性属性)及数学转换关系,对航天器姿态轨道控制系统的设计与操作至关重要。

ScilogyHunter的博客 52

C++中的i++++i你真的理解吗?

本篇文章主要讲解C++中的i++++i的运算规则,原本,我以为自己已经掌握了这个知识点,但是,在接触了类似(i++)+(++i)+(i++)的非规范运算时,却卡了很长时间,下面我就来着重讲解这个"事故"。 一.i++++i的区别 1.i++ i++的意思是先赋值再自增,通俗讲就是计算i++,先计算i,计算结束后i自增1。注意,自增的i不参与开始计算。在进行下一步计算时,自增的i为最新的i。 通过一个示例大家就能明白了。 int main(){ int i=0; int j=i++; cout&lt

baidu_41191295的博客 1万+

C++中的++i 与 i++详解

一、区别 i++++i 的主要区别有两个:1、 i++ 返回原来的值,++i 返回加1后的值。2、 i++ 不能作为左值,而++i 可以。 二、原理 毫无疑问大家都知道第一点,我们重点说下第二点。首先解释下什么是左值(以下两段引用自中文维基百科『右值引用』词条)。 左值是对应内存中有确定存储地址的对象的表达式的值,而右值是所有不是左值的表达式的值。 一般来说,左值是可以放到赋值符号左边的变量。但是, 能否被赋值不是区分左值与右值的依据。比如,C++的const左值是不可赋值的;而作为临时对

sinat_31608641的博客 8649

C语言常见问题——++i与i++详解

目录 一、++i与i++ 1.引例 2.(i++)+(i++)+(i++)与(++i)+(++i)+(++i) 3.总结 二、函数中的++ 1.printf中的++ 2.++i/i++作为函数的参数 3.总结 一、++i与i++ 1.引例 对于如下程序,其输出结果是什么 #include <stdio.h> int main() { int i=1,a=0,b=0; a=i++; b=++i; printf("i=%d,a=%d,b.

易水卷长空的博客 3万+

C++中,为什么部分程序员喜欢在循环中写‘++i’而不是‘i++’?

自入行以来,无论是查阅资料、技术博客亦或是同事间的技术交流,都有一个共识:在循环的时候,务必使用前置操作符,因为其性能优于后置操作符,久而久之,这个就像一个不成文的规定,大家都在遵循,久而久之,成为潜移默化的编码习惯。而使得大家持有这个观点的原因就是后置操作会产生临时变量,而后置操作则不会。后置操作和前置操作,一个会产生临时变量,一个不会产生临时变量,其原因是:前置操作遵循的规则是change-then-use,而后置操作遵循的规则是use-then-change。正因为后置操作的use-then-chan

南风fahaxiki 9788

++i和i++哪个效率更高

参考博文:https://blog.csdn.net/qq_38570571/article/details/81255717这篇写的不错 在C++当中 ++i比i++效率更高

MusicMan 1479

++i 比 i++ 快的原因

一句话总结:是因为++i可以通过寄存器来进行计算,而 i++ 需要生成一个临时变量用于保存原始值,导致额外的内存读写操作

achouyihao的博客 227

c++】i++++i 详解

c++】i++++i 详解 参考:前++(--)和后++(--)的区别  https://blog.csdn.net/u011321104/article/details/9280879《c++ Primer中文版》Stanley B Lippman  等著 1.小引    递增 ++ 和递减-- 操作符为对象加 1或减 1 操作提供了方便简短的表示它们最一般的用法是对索引、迭代器或指向一个集...

gogo小Sa的专栏 4万+

C++ 循环语句中 i++++i 的区别深入剖析

C++循环语句中i++++i的区别主要在于运算顺序和返回值。i++先返回当前值再自增,++i先自增再返回值。在for循环中,两者功能相同,现代编译器优化后性能差异可忽略,但理论上++i更高效(避免创建临时变量)。while循环中同样遵循各自运算规则。建议性能关键场景优先使用++i,一般情况则以代码可读性为准。参考文献包括C++标准教材和性能优化指南,深入解析了自增运算符的原理和应用场景。

2401_84309782的博客 1421

C/C++ ++i和i++详解与效率比较

本文详细解析了C/C++中前置递增(++i)和后置递增(i++)的区别。前置递增先加1后返回值,后置递增先返回原值再加1。两者都会永久修改变量值,主要区别在于表达式返回值不同。现代编译器对简单场景下的i++能优化到与++i效率相同,但在循环中推荐使用++i。文章警告了同一表达式中混用递增操作会导致未定义行为,并强调理解操作顺序和返回值差异是掌握这两种操作符的关键。性能测试显示两者在优化后无明显差异,建议关注算法优化而非此类微优化。

本博客分享软硬件一体化开发实战。硬件涵盖 PCB 设计、STM32 等 MCU 底层开发;软件包含 C++、Rust,Qt/QML、PyQt、Slint、TouchGFX、LVGL 各类 GUI 框架。方便软硬件开发者查阅学习。欢迎关注! 1772

C++中的i++++i的区别

i++++i主要有两方面的区别:一、是赋值顺序上;二、是效率上 一、赋值顺序 在赋值上: i++ 是先赋值,再进行++操作。 ++i 是先进行++操作,再执行赋值操作。 具体实例如下 int i = 0, j = 0, k = 0; k = i++; // 此时 k=0,i=1。后置版本得到递增之前的值 k = ++j; // 此时 k=1,i=1。前置版本得到递增之后的值 二、...

Jeffxu_lib的博客 3709

深入理解 ++i 和 i++ 的区别与性能影响

在编程中,++i 和 i++ 作为递增操作符的两种形式,经常被用到。虽然它们都能完成变量的自增,但在不同语言中,它们的工作机制和性能却有些微妙的差异。下面将深入探讨 Java、C++ 和 JavaScript 中这两者的区别、性能差异以及最佳实践。同时还会探讨为什么在 for 循环中,无论使用 ++i 还是 i++,它们的结果都是一样的。

weixin_37600397的博客 2608

基于for循环中i++++i的思考(个人发现)

本文是一篇作者基于常用for循环中i++++i的如何使用的思考,感兴趣的同学可以来看看。

顾得泉的博客 1701

i++++i的区别

在for循环中,i++++i的效果通常相同。对于内置类型,性能差异可以忽略;对于自定义类型,推荐使用++i。根据具体需求选择使用i++++i,尤其是在表达式中。

qq_56921730的博客 1023

i++++i的运算和效率区别

i++++i的运算和效率区别

金属服务,美好生活,天网改变世界,华帝量子科技。 3020

比较 i++++i

++i 效率略优于 i++

Edward2022的博客 1164

i++++i

i++++i的区别

weixin_60401853的博客 1510

C++ for循环中 ++i 与 i++ 的性能之谜:真的有区别吗?

这篇文章比较了C++中前缀增量(++i)和后缀增量(i++)操作符的性能差异。对于内置数据类型,现代编译器会优化掉两者的区别,生成相同的机器指令。但对于自定义类型,前缀增量直接修改对象并返回引用,而后缀增量需要创建临时副本,导致额外开销。因此,在自定义类型的循环中应优先使用前缀增量以获得更好的性能。

Lion_Long的博客 443
上一篇: C++运算符重载
下一篇: C++中size()返回值千万不要和负数作比较
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值