恰好,左值的定义是:具名(即,具有名称)的存储空间。所以++i是左值。
左值不但具有空间实体,还具有读写访问权。 现在我们来看a++的实现: int temp; temp=a; a=a+1; return temp; 因为a++返回的是编译器自动分配的临时变量temp,而这个temp并不是你程序中定义的可寻址变量的引用 ,也就是说你不能通过地址对它进行操作.(换句话说就是不能作为左值)。 而++a的实现为: a=a+1...
简单得到理解,就是i++返回的是一个临时变量,函数返回后不能被寻址得到,它只是一个数据值,而非地址,因此不能作为左值。 更简单的代码解释: //i++:{inttmp; tmp=i; i=i+1;returntmp; }//++i:{ i=i+1;returni; }
而i++不能作为左值,因为它返回的是一个临时变量,函数返回后不能被寻址得到,它只是一个数据值,而非地址,因此不能作为左值。 int i = 0; int j = 0; ++i = j = 5; cout << "i=" << i << ", j=" << j << endl; // i=5, j=5 在这个例子中,++i可以作为左值,所以可以将5赋给它,...
一. 这个问题牵涉到得首先是左值(L-value)和右值(R-value)的概念; 1. 我查资料的时候发现很多地方都引用一句话:"通俗的讲,左值就是能够出现在赋值符号左面的东西,而右值就是那些可以出现在赋值符号右面的东西了。"我觉得这句话在刚开始理解的时候是什么用都没...
int& int::operator++() //这里返回的是一个引用形式,就是说函数返回值也可以作为一个左值使用 {//函数本身无参,意味着是在自身空间内增加1的 *this += 1; // 增加 return *this; // 取回值 } //后缀形式: const int int::operator++(int) //函数返回值是一个非左值型的,与前缀形式的差别所在。
i 和 -i 都是表达式,这没有问题。但一个是左值(i),一个是右值(-i)。++,--这两种操作符要求作用于左值,所以i++合法,(-i)++不合法。
因为后置++运算符返回的是一个右值,而前置++运算符返回的是一个左值。
1、赋值顺序不同。++i是先加后赋值;i++是先赋值后加;++i和i++都是分两步完成的。因为++i是后面一步才赋值的,所以它能够当作一个变量进行级联赋值,++i=a=b,即++i是一个左值;i++的后面一步是自增,不是左值。2、效率不同。比如i=3,b=i++就是说b=3,完成之后让i变成4,b=++...
++i是左值,但i++不是左值A.正确B.错误的答案是什么.用刷刷题APP,拍照搜索答疑.刷刷题(shuashuati.com)是专业的大学职业搜题找答案,刷题练习的工具.一键将文档转化为在线题库手机刷题,以提高学习效率,是学习的生产力工具