a++只能作为右值,不能放到=的左边。因为a++是对a的值自增后,把原来的对象返回,就是返回的是一个临时对象,因此a++就只能作右值。而++a返回的是a这个对象,所以可以作左值和右值。
PS:这个日志很短,但是还是得写出来。本来这个问题是我在看Primer时就想到了,刚刚看了一个面试题,竟然忘了。所以尽量把想到的写下来。
墨衍会员
·
AI 创作全网分发
墨衍智能分发
本文由作者通过墨衍一键同步至各平台
1分发平台
800+累计阅读
807平均单平台
已同步平台
CSDN
微信公众号
微博
知乎
掘金
百家号
博客园
抖音
小红书
你的文章也可以这样分发
墨衍会员 ¥399起/年,写一次发全网
我也要 →
码龄14年
a++只能作为右值,不能放到=的左边。因为a++是对a的值自增后,把原来的对象返回,就是返回的是一个临时对象,因此a++就只能作右值。而++a返回的是a这个对象,所以可以作左值和右值。
PS:这个日志很短,但是还是得写出来。本来这个问题是我在看Primer时就想到了,刚刚看了一个面试题,竟然忘了。所以尽量把想到的写下来。
C++ Primer精读
当前文章被以下社区和专栏收录:
Mplus—验证性因素分析(Confirmatory Factor Analysis, CFA)
介绍一阶和二阶验证性因素分析概况及在Mplus中的操作方法。
a++ 与 ++a 是不是左值?为什么?
ka 1.什么是左值 int a = 2; 这句话里面2是一个"值",a是一个变量,它有一个4字节的内存区域,这个内存区域里面装着2,这就暗示这个内存区域可以被改写,可以被赋值,可以出现在=号的左边 a是一个"左值" 而2就仅仅是一个2,它是一个值,我看看到它,就认为它是一个2,只能把他赋给别人,不能被赋值 2是一个"右值",而且不能是"左值",而a可以赋值给别人,所以a即是一
Unity中URP下的菲涅尔效果实现(个性化修改)
在上篇文章中,我们实现了 URP 下的菲涅尔基础效果,我们在这篇文章中,对其进行自定义化修改。
c++小知识
1、a++不能作为左值 int a = 10; ++a = 1;//ok a++ = 1;//errora++是先使用a的值作运算,然后再使a的值增加1,如果允许执行a++左值的赋值运算,那么就要在赋值运算之后使a值再增加1,这样赋值运算就没意义了,a最终的结果不是赋值后的结果。 2、#error指示符 指令将使编译器显示一条错误信息,然后停止编译 3、AS
左值和右值的区别(以a++和++a为例)
左值(lvalue)和右值(rvalue)最先来源于编译。在C语言中表示位于赋值运算符两侧的两个值,左边的就叫左值,右边的就叫右值。 定义: 左值指的是如果一个表达式可以引用到某一个对象,并且这个对象是一块内存空间且可以被检查和存储,那么这个表达式就可以作为一个左值。 右值指的是引用了一个存储在某个内存地址里的数据。 从上面的两个定义可以看出,左值其实要引用一个对象,而一个对象在我们的程序
左值 右值 将亡值
C++中左值、右值、将亡值的区别
从左值和右值的角度分析a++和++a
(a++)返回的是a在+1之前的值,这个值是一个临时的对象。这个临时的对象在(a++)这条语句结束后,马上就结束了生命周期,即右值,而我们不能对一个右值进行自增运算。a++返回的是右值(rvalue),而我们不能对一个右值进行自增操作。所以++(a++)会报错。总之,a++和++a都是一个表达式,表达式返回的都是一个右值,我们不能对一个右值进行自增操作。int a=5,则 ++(a++)的值是?类似于++(++a)也是不对的。
C++ 关于 i++ 和 ++i 的左值、右值问题
对于下面一段代码,为什么第一个取址操作错误,而第二个取址操作却是正确的。
【C++】前缀++和后缀++的区别
因为现在在看典型运算符的重载,其中有对前缀++和后缀++的重载,又忘记了它们之间的区别,去论坛看了下得到了很好的理解, 区别: 引用论坛中博友的话: 前缀就是自己本身+1 后缀就是给一个没+1的副本使用 对于这句话我大概理解到了,不过这针对的应该是返回值来说的。 ++i和i++连起来应该看是一个函数的缩写。可以对照运算符重载中对增量运算符的重载。 然后又通过下面博友...
26.C++中的左值和右值是什么?++i是左值还是右值,++i和i++那个效率更高?
但对于自定义类型(如迭代器),),现代编译器可能优化掉。: 对于基本类型(如。
C++右值引用
右值 C++11增加了一个新的类型,称为右值引用(R-value reference),标记为&&。在介绍右值引用类型之前要了解什么是左值和右值。 lvalue是loactor value的缩写,rvalue是read value的缩写 左值是指存储在内存中、有明确存储地址(可取地址)的数据 右值是指可以提供数据值的数据(不可取地址) 通过描述可以看出,区分左值和右值的便捷方法是:可以对表达式取地址(&)就是左值,否则就是右值。所有有名字的变量或对象都是左值,而右值是匿名的。 右
C语言中的*p1++=*p2++
例:把一个数组的内容复制给另一个数组 #define SIZE 50 int x[SIZE]; int y[SIZE]; int *p1, *p2; void try2() { for( p1=x, p2=y; p1-x<SIZE; ) *p1++=*p2++; } *p1++ 后缀++ 操作符的优先级高于*操作符,即*p1++ = *(p1++) 故执行顺序为:p1++ ...
(C++)关于i++和i++的左值、右值问题
1、什么是左值和右值? 左值就是出现在表达式左边的值(等号左边),可以被改变,他是存储数据值的那块内存的地址,也称为变量的地址; 右值是指存储在某内存地址中的数据,也称为变量的数据。 左值可以作为右值,但右值不可以是左值。 因此也只有左值才能被取地址。 2、举两个问题: int i = 0; (i++)+=i; //错误 (++i)+=i; //正确 int *i
i++和++i区别
i++ 与 ++i 的主要区别有两个: 1、 i++ 返回原来的值,++i 返回加1后的值。 2、 i++ 不能作为左值,而++i 可以。 // 前缀形式: int& int::operator++() //这里返回的是一个引用形式,就是说函数返回值也可以作为一个左值使用 {//函数本身无参,意味着是在自身空间内增加1的 *this += 1; /...
C语言左值和右值,以及操作符属性总结
《C和指针》这本书上讲到左值和右值,概念有点含糊 据我自己的理解: 左值:标识的应该是个存储位置,内存中的位置,左值可以是个变量名,或者是个表达式,但表达式必须表示的是个内存位置 右值:就是个值,变量的值,表达式的值 操作符的属性有3个因素:操作符的优先级,操作符的结合性,操作符是否控制执行顺序。 操作符的优先级:决定含有多个操作符的表达式的求值顺序,每个操作的优先级不同 操作符的结合
C语言灵活的指针表达式 左值 右值
0. 参考资料 《C和指针》 1. 初始状态 char ch = 'a'; char *cp = &ch; 其中?表示后面的数据内容未知 2. ch 其中ch当作右值就是表达式的值a,使用粗椭圆提示; 其中ch当作左值时就是内存地址,使用粗方框表示 3. &ch 右值表示变量ch的地址,这和cp存储的值是一样的,但是这个表达式并没有通过cp产生,因此椭圆和cp没有关系 左值非法,原因是&ch求值时结果存放在计算机未知的位置,未标识...
C++ 浅谈之左值、纯右值、将亡值
左值,纯右值,将亡值
深度解析C++左值、右值与将亡值
值类别是表达式的属性。它描述了表达式可以如何被使用,而与内存的分配状态无必然的关联。左值(lvalue):有标识的表达式纯右值(prvalue):无标识的可移动表达式将亡值(xvalue):有标识的可移动表达式左值(lvalue)是指那些可标识持久存在的对象(生命周期超出了表达式求值的持续时间)。(1)可标识(左值必有的特征)可标识是指可被区分,可被唯一识别。在左值的语境中,可标识是指对象具备固定的、可被追踪的内存空间。有名称也可以被作为可标识的依据。
C++中为什么++i比i++高效
i++ 与 ++i 的主要区别有两个:1、 i++ 返回原来的值,++i 返回加1后的值。2、 i++ 不能作为左值,而++i 可以。 毫无疑问大家都知道第一点(不清楚的看下下面的实现代码就了然了),我们重点说下第二点。首先解释下什么是左值(以下两段引用自中文维基百科『右值引用』词条)。 左值是对应内存中有确定存储地址的对象的表达式的值,而右值是所有不是左值的表达式的值。 一般来说,左值是可以放到赋值符号左边的变量。但 能否被赋值不是区分左值与右值的依据。比如,C++的const左值是不可赋值的;而
[vip]【c++学习(41)】关于++i和i++的左值、右值问题,C++11右值引用移动构造函数和移动复制运算符;单纯的std::move是万能引用,编译器会回退到复制构造函数或复制赋值运算符
在c++中,一个值要么是右值,要么是左值,左值是指表达式结束后依然存在的持久化对象,右值是指表达式结束时就不再存在的临时对象。所有的具名变量或者对象都是左值,而右值不具名。右值引用(Rvalue References)是 C++11 中引入的一个重要特性,主要用于实现 移动语义 和 完美转发,它大大提高了性能,尤其是在处理大型数据结构时,避免了不必要的复制。右值引用是通过 && 语法实现的。
C++中的++i 与 i++详解
一、区别 i++ 与 ++i 的主要区别有两个:1、 i++ 返回原来的值,++i 返回加1后的值。2、 i++ 不能作为左值,而++i 可以。 二、原理 毫无疑问大家都知道第一点,我们重点说下第二点。首先解释下什么是左值(以下两段引用自中文维基百科『右值引用』词条)。 左值是对应内存中有确定存储地址的对象的表达式的值,而右值是所有不是左值的表达式的值。 一般来说,左值是可以放到赋值符号左边的变量。但是, 能否被赋值不是区分左值与右值的依据。比如,C++的const左值是不可赋值的;而作为临时对
584
778
1192

被折叠的 条评论
为什么被折叠?



