右值是指存储在某内存地址中的数据,也称为变量的数据。 左值可以作为右值,但右值不可以是左值。 因此也只有左值才能被取地址。 2、举两个问题: int i = 0; (i++)+=i; //错误 (++i)+=i; //正确 int *ip = &(i++); //错误 int *ip = &(++i); //正确 3、为什么i++不能作左值? 我们...
右值:一般位于等号右边,存储在某内存地址中的数据,变量的数据。因此也只有左值可以取地址。可以看一下...
文字常量和变量都可 被用作右值。2).它的地址值即存储数据值的那块内存的地址。它有时被称为变量的左值(lvalue,读作ell-value)。我们也可认为左值的意思是位置值location value文字常量不能被用作左值.(2)首先对于i++的实现是:int temp;temp = i;i = i+1;return temp;而++i的实现是:i...
前置运算++i的结果为传统左值,后置运算i++的结果为传统右值。传统左值即能等号左边出现的值,换句话说...
或者说左值是代表一个内存地址值,并且通过这个内存地址,就可以对内存进行读并且写(主要是能写)操作;这也就是为什么左值可以被赋值的原因了。相对应的还有右值:当一个符号或者常量放在操作符右边的时候,计算机就读取他们的“右值”,也就是其代表的真实值。简单来说就是,左值相当于地址值,右值相当于数据值...
++i在运算过程中不产生临时对象,返回的就是i,是个左值,类似++i=1这样的表达式是合法的,而i++在运算的过程中会产生临时对象,返回的是零时对象的值,是个右值,像i++=1这样的表达式是非法的 对于内置类型,单独的i++和++i语句,现在的编译器基本上都会优化成++i,所以就没什么区别了 ...
出现该错误提示是因为语法错误。“left operand must be l-value”的意思是左操作数必须是左值。左值(l-value):出现于“=”左边的标识符。(为变量)。右值(r-value):出现于“=”右边的标识符。(变量或表达式)。表达式:产生确定不变的值。类似于a1x^n + a2x^n-1 +...+ an多项式(n>=...
左值是对应内存中有确定存储地址的对象的表达式的值,而右值是所有不是左值的表达式的值。一般来说,左值是可以放到赋值符号左边的变量。但能否被赋值不是区分左值与右值的依据。比如,C++的const左值是不可赋值的;而作为临时对象的右值可能允许被赋值。左值与右值的根本区别在于是否允许取地址&运算符获得...
i++返回的是一个中间值,就是一个“值”,这个值就像6,7这样的数字一样,是一个右值,是不能修改的 而++i返回的是i本身,是个左值,所以++(++i)也罢,(++i)++,也罢 ++i=100是都可以的 前后++的实现类似与下面这样 int operator++(int) //后++ 返回值 { int tmp;tmp=*this;this=...
而i+=2得到的结果是i=1,运算得到的值不相同。3、运算效率不相同 i=i+2运算效率最低,因为运算时读取右i的地址i+1,读取左i的地址;将右值传给左边的i(编译器并不认为左右i的地址相同),而i+=2运算时读取右i的地址,令i=1,将得到的值传给i(因为i的地址已经读出)。