关于i++和++i以及左值,右值

unity中VideoPlayer播放视频,使用Shader除去黑底且无黑边 1. 创建一个Shader 和 一个 材质球;Shader中复制如下代码:(此Shader代码为“ChromaKeyKit”插件中的ChromaKey_Alpa_Genera代码,但因只需要除去视频黑底而挂一个插件有点不合适) // Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' Shader "ChromaKeyKit/ChromaKey/ChromaKey_Alpha_General" 阅读详情

i++就是先用了i的值(用于赋值之类的操作),再i自加1. 而++i就是把i的值先自加1再用作其他操作.

不过今天无意之间看到了帖子上有人说  i++=5;      //不合法

                                                                 ++i=5;      //合法

       一. 这个问题牵涉到得首先是左值(L-value)和右值(R-value)的概念;

            1. 我查资料的时候发现很多地方都引用一句话:"通俗的讲,左值就是能够出现在赋值符号左面的东西,而右值就是那些可以出现在赋值符号右面的东西了。"我觉得这句话在刚开始理解的时候是什么用都没有的一句废话.因为我们都不知道哪些东西应该放在赋值符号的左边,哪些东西又应该放在赋值符号的右边这样说是没有意义的.

            2.接着我找到个比较靠谱的定义:左值是指具有对应的可由用户访问的存储单元,并且能由用户改变其值的量。如一个变量就是一个左值,因为它对应着一个存储单元,并可由编程者通过变量名访问和改变其值。

               (下面的第三点是c++primer中的)

            3.变量和文字常量都有存储区,并且有相关的类型。区别在于变量是可寻址的(addressable)对于每一个变量都有两个值与其相联:

                 1).它的数据值,存储在某个内存地址中。有时这个值也被称为对象的右值(rvalue,读做are-value).我们也可认为右值的意思是被读取的值(read   value)。   文字常量和变量都可  被用作右值。   

                 2).它的地址值——即存储数据值的那块内存的地址。它有时被称为变量的左值(lvalue,读作ell-value)。我们也可认为左值的意思是位置值location   value文字常量不能被用作左值

       到这里,左值和右值的基本概念应该清楚了.而一些牛人追求的更细致的到C89和C99以及C++标准上面的差异就不在我的思考范围了:)

    二.再讲讲i++和++i的实现

               原来也一直迷惑于i++与++i的返回值的问题,但一直没弄明白.这次一并查清楚吧.

               首先对于i++的实现是:   

                                             int   temp;   

                                             temp   =   i;   
                                             i   =   i+1;   
                                             return   temp;   

                         而++i的实现是:   
                                              i   =   i+1;   

                                              return   i;               

               所以对于我们提出来的问题已经能得到解决了:

                    i++=5; 是错误的是因为i++返回的是编译器自动分配的临时变量temp,而这个temp并不是你程序中定义的可寻址变量的引用,也就是说你不能通过地址对它进行操作.(换句话说就是不能作为左值)

                    ++i=5;是正确的就是因为其返回值就是i;

          再啰嗦几句关于i++和++i的效率问题:按上面分析来说,++i的效率是比i++效率高些的.(VC)对于内置(built-in)类型,写++变量和变量++编译器都经过优化,采用++变量的方式.但是对于自定义类对象如果重载先++,和后++操作符那么要使用先++,因为这时编译器,不可能对你的类型进行优化!  

垂类大模型 研发方向与具体方案调研 领域知识库加上通用大模型,针对通用大模型见过的知识比较少的问题,利用向量数据库等方式根据问题在领域知识库中找到相关内容,再利用通用大模型强大的summarization和qa的能力生成回复,完成本次垂直大模型研发。目前很多企业希望将大模型的能力应用到企业内部当中,但很多通用大模型只是一个预训练模型,其所能回答的知识主要来源于互联网上公开的通用知识库,对于部分垂直领域和企业内部的私有知识库的问答,给出的回答。:垂类大模型的效果与底座性能息息相关,研发垂类大模型第一步就是确定开源大模型解决方案。 阅读详情

相关推荐

Unity UI适配核心:Canvas Scaler模式解析与2023版避坑指南

UI适配是游戏与应用开发中的基础挑战,其核心在于确保界面元素在不同屏幕分辨率与设备上保持视觉一致与功能可用。原理上,系统通过坐标转换与缩放计算,将设计稿的布局映射到物理屏幕。技术价值在于提升用户体验的一致性与产品的跨平台兼容性。应用场景广泛覆盖手游、PC端应用及各类交互界面。本文聚焦Unity引擎中的Canvas Scaler组件,深入剖析其Scale With Screen Size等模式的工作原理,并结合锚点设置、安全区域处理等高频搜索热词,提供解决UI错位、拉伸及异形屏适配等常见问题的工程实践方案,帮

weixin_30920597的博客 623

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

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

sinat_31608641的博客 8656

技能伤害继承英雄属性【War3地图编辑器】

风暴之锤跟随山丘之王的力量增长

ArYe 2304

[c++]i++和++i的左值右值问题

由于前置++返回的是本身的引用,而后置++返回的是一个临时的拷贝。所以表达式 x++ 返回的是一个将亡值,我们无法对其取地址,所以是一个右值,而 ++x 返回的是 x 本身,所以是一个左值。我们采用代码来验证一下,使用一个万能引用来传入表达式的返回值,然后使用 decltype 对参数的类型进行推导,最后使用 type_traits 进行左右值的判断。可以看到结论:表达式 i++ 是一个右值, ++i 是一个左值。其原理也很基础,我们仿写一下 int 的前置++和后置++。

o0cot0o的博客 891

毕业设计——基于卷积神经网络的高速公路团雾智能识别系统设计与实现(数据集+源码+可视化+综述)

同时,也可以结合其他技术,如雷达、红外传感器等,实现多源信息的融合与协同处理,提高系统的可靠性和稳定性。实验结果表明,该系统能够实现对高速公路团雾的准确、快速识别,为高速公路的安全运行提供了有力保障。团雾作为一种常见的气象现象,具有突发性、局地性和消散迅速的特点,对高速公路的行车安全构成严重威胁。通过设计合适的网络结构,如增加卷积层、池化层等,实现对图像中团雾特征的自动学习和提取。预处理:对采集到的图像进行去噪、增强等预处理操作,以提高图像质量,降低后续处理的难度。读取数据,随机分为训练集和验证集。

abackcab的博客 668

《深入 UFS Explorer:自定义 RAID 配置指南》

UFS Explorer支持以虚拟模式组装任何受支持的RAID配置,以便后续访问其内容或恢复丢失数据。启动RAID构建器;向RAID构建器主内容区域的列表中添加RAID组件;为不可用组件插入占位符(需当前RAID级别支持且软件兼容);调整组件的准确顺序;在“虚拟RAID配置”区域设置RAID参数;以虚拟模式组装阵列各部分。程序主窗口“存储设备导航面板”中打开的任何存储设备(包括驱动器、逻辑卷、磁盘镜像、虚拟磁盘及其他复杂存储设备)均可作为RAID组件。

melonbo的专栏 1404

i=i++表达式的值为什么没有变化?

#include void main() { int i = 3; i = i++; printf("i=%d\n",i); } 写了一个c语言程序,但是运行后,i的值打印为3,没有进行变化,而且再java里面也是,这是为什么呢? 原因: 1,首先对表达是i++进行求值,结果为3 2,之后进行i++操作,此时i变为4 3,之后进行 赋值 也就是 ‘=’ 操作,因为i+

行善之人必有余庆 1702

基于OpenClaw的自动化文件管理与文档分类系统设计与实现

本文介绍了一种基于OpenClaw的自动化文件管理与文档分类系统。系统采用三层架构设计,包含数据层、逻辑层和应用层,核心组件涵盖文件扫描、处理、分类、移动等功能。技术选型上使用Python/FastAPI作为后端,结合PostgreSQL/Elasticsearch/MinIO存储方案,并整合scikit-learn/PyTorch等AI技术实现智能分类。系统实现了文件递归扫描、增量扫描、元数据提取等功能,通过文件哈希和修改时间检测变化。该方案能有效提升文件管理效率,实现文档的自动化分类与智能管理。

一键难忘的博客 755

知识共享 i++,++i的区别

i++ i++可以是i==i+1,不过是在该表达式之后再使 i 的值加1 当作为运算符 i++的值先把i的值赋予,然后i再加1 i- -同理于i++ ++i ++i可以是i==i+1,区别于i++的是,在该表达式 i 的值就加1 当作为运算符 ++i的值先使i+=1,然后再进行赋值 - - i同理于++i 例子对比 对比总结 单独来说i++,++i都是为原值i+=1 用做运算符上 i++相较于++i,i++在此行表达式i的返回值仍为原值 ++i相较于i++,++i在此行表达式i的返回值为原

Lululovesickness的博客 583

喷涂机器人系列编程:ABB IRB 5500_(2).ABB IRB 5500喷涂机器人系统架构与组件

ABB IRB 5500喷涂机器人系统不仅在性能上表现出色,而且在安全和维护方面也提供了全面的解决方案。通过本文的详细介绍,希望读者能够更好地理解和掌握这一系统的架构和功能,为实际应用提供有力支持。

zhubeibei168的博客 779

『杭电1199』Color the Ball

Problem Description There are infinite balls in a line (numbered 1 2 3 ....), and initially all of them are paint black. Now Jim use a brush paint the balls, every time give two integers a b and follow by a char 'w' or 'b', 'w' denotes the ball from a to

漠宸离若的博客 498

++i在C、C++中是不是左值?

前些天写blog左值与右值(C++学习)时,已经确认在C++中,++i 是左值。可是,今天在newsmth的C语言版上看到一个相关的问题。发现在C语言中,++i不是左值。 例子 一个很简单的例子: int main() { int i = 0; ++i = 5; return 0; } 保存成 hello.c ,分别用 gcc、clang、cl、...

tomhibolu 316

#systemverilog# 之 event region 和 timeslot 仿真调度(三)Verdi 辅助查看

通过今天的学习,我们知道:event region 是event sequence 的全集。我们打开了 event region feature 也就开启了event sequence 的功能。

那么菜的博客 1366

又学懂辣 !五分钟带你掌握C++中的左值,右值,左值引用,右值引用 以及++i和i++的深度刨析 史上最详细!

1.左值是具有持久性且可以获取地址的对象或表达式,通常出现在赋值操作符的左边,例如变量或具名对象。 2右值是临时性的、无法获取地址的对象或表达式,通常出现在赋值操作符的右边,例如临时计算的结果或字面量。 3.左值引用使用 & 声明,用于操作现有对象而避免复制,如传递参数和返回内部对象引用。 4.右值引用使用 && 声明,用于实现移动语义和优化临时对象的资源管理。

qq_74246741的博客 3484

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

[转]关于i++和++i以及左值,右值

原本一直对i++和++i的区别不是很在意,觉得i++就是先用了i的值(用于赋值之类的操作),再i自加1. 而++i就是把i的值先自加1再用作其他操作. 很多人都问类似于j=++i+++i+i;之类的题目,个人觉得除了有些变态的学校的变态的考试会考.其他根本用不到.如果你在实际写代码的时候这样写,不但是给自己找麻烦,以后代码维护时,你也会被人在心里诅咒很久的.... 貌似跑题了,汗.... 反正以前就一直没在意这个. ...

皮牙子快跑的博客 281

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

26.C++中的左值和右值是什么?++i是左值还是右值,++i和i++那个效率更高?

但对于自定义类型(如迭代器),),现代编译器可能优化掉。: 对于基本类型(如。

mangolinlin的博客 775

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

C++ 关于 i++ 和 ++i 的左值、右值问题

对于下面一段代码,为什么第一个取址操作错误,而第二个取址操作却是正确的。

WHEgqing的专栏 360

java左值与右值问题_i++和++i以及左值,右值

左值(LValue)和右值(RValue)的一个快捷记法是赋值运算,左值是赋值运算左边的值,右值就是右边(=,=废话)。例如:int a = 5;a就是左值,5就是右值。当然,如果真是这么个含义,那么这概念就相当蛋疼了。其实不是这样的~~左值其实是对一块内存区域的引用(这个还不是C++中的int &a之类的引用),比如上边的a,就对应了一块内存区域(起始地址为&a,大小为sizeo...

weixin_34486033的博客 1239

(C++)关于i++和i++的左值、右值问题

1、什么是左值和右值? 左值就是出现在表达式左边的值(等号左边),可以被改变,他是存储数据值的那块内存的地址,也称为变量的地址; 右值是指存储在某内存地址中的数据,也称为变量的数据。 左值可以作为右值,但右值不可以是左值。 因此也只有左值才能被取地址。 2、举两个问题: int i = 0; (i++)+=i; //错误 (++i)+=i; //正确 int *ip = ...

weixin_30481087的博客 95
上一篇: C++弱引用智能指针weak_ptr的用处
下一篇: C++成员函数在内存中的存储方式
heary29
博客等级 码龄12年 37粉丝 85原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值