i++与++i作为左值

#include <iostream>

using namespace std;

int main()

{

int i = 9;

//i++ = 10;

++i = 10;

return 0;

}

/*

i++ 不可以作为左值;

++i 可以作为左值。

C++primer 中关于左值右值的说法:

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

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

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

i++的实现代码:

int temp;

temp   =   i;

i      =   i+1;

return temp

++i的实现代码:

i = i+1;

return i;

i++ = 10;错误是因为i++返回的是编译器自动分配的临时变量,而这个临时变量temp并不是你程序中定义的可寻址变量的引用,也就是不能作为左值。

++i = 10;因为其返回值就是i;

上面也可以看出 ++i 的效率比 i++高

*/

时间: 2025-01-01 07:49:43

i++与++i作为左值的相关文章

a++和++a可不可以作为左值

1)首先说左值和右值的定义: 变量和文字常量都有存储区,并且有相关的类型.区别在于变量是可寻址的(addressable)对于每一个变量都有两个值与其相联: 1).它的数据值,存储在某个内存地址中.有时这个值也被称为对象的右值(rvalue,读做are-value).我们也可认为右值的意思是被读取的值(read value).文字常量和变量都可被用作右值. 2).它的地址值--即存储数据值的那块内存的地址.它有时被称为变量的左值(lvalue,读作ell-value).我们也可认为左值的意思是位

为什么i++不能作为左值

今天Mayuyu带大家一起来搞清楚i++与++i的区别.或许你在C++编程中经常使用它们,但是却不知道它们背后的原 理.同样Mayuyu也不知道,那么今天很有必要搞清楚它们.现在就让Mayuyu带领大家一起学习吧... 首先,说到i++于++i的区别,那么就先要了解它们的底层实现细节.下面是它们的实现代码 对于i++是 int tmp; tmp = i; i = i + 1; return tmp; 而对于++i则是 i = i + 1; return i; 这样就很明确了,由于tmp是一个编译

[转载]非常量引用的初始值必须为左值的问题

首先,先看下面一个例子: eg.1 #include<</span>iostream> usingnamespace std; int main(){ int i =2; double &r =i; return 0; } gcc error: invalid initialization of reference of type 'double&' from expression of type 'int' 如果改成 const double &r =i;

由“左操作数必须为左值”引起的反思

今日写一个程序无论如何也调不好,后来一步步做改动筛选,直到筛到这一步 bool in_word=true; char ch; while (ch=getchar() && in_word){} 循环到这一步无论如何都不继续进行,于是我就改变了一下顺序. ch=getchar(); while(in_word){} 程序又可以正常运行了,遂将获取字符的语句顺手加到了后面. while (in_word && ch=getchar()){} 然后就出现了error C2106:

Finally-操作返回值

Finally中操作返回值会出现一个问题?值没有被改变? 1 static int M1() 2 { 3 int result = 100; 4 try 5 { 6 result = result + 1; 7 //======引发异常的代码========== 8 int x = 10, y = 0; 9 Console.WriteLine(x / y); 10 //======引发异常的代码========== 11 return result; 12 } 13 catch 14 { 15

C++ 中左值和右值的探讨

我的主力博客:半亩方塘 对于 C++ 中的左值和右值,我们通常的说法是:当一个对象被用作右值的时候,用的是对象的值(内容):当对象被用作左值的时候,用的是对象的身份(在内存中的位置),这句话来自于 <C++ Primer 第五版> 第 121 页,那么,对于这句话,该作何理解呢?下面我想来谈谈我的看法: ISO C++03规定表达式必须是左值或右值之一,而在ISO C++11中,左值性被正式地扩充为更复杂的值类别,对于一个变量来说,与它相关的有两个部分:一是变量在内存中的地址,二是这个变量在内

[C++]右值引用和转移语义

右值引用和转移语义 本文尝试着解释何为右值引用和转移语义以及使用它们具有优势,并提供相关案例分析. 定义 左值和右值 首先我们先来理解一下什么是左值和右值. C/C++语言中可以放在赋值符号左边的变量,左值表示存储在计算机内存的对象,左值相当于地址值.右值:当一个符号或者常量放在操作符右边的时候,计算机就读取他们的"右值",也就是其代表的真实值,右值相当于数据值. C/C++语言中可以放在赋值符号左边的变量,即具有对应的可以由用户访问的存储单元,并且能够由用户去改变其值的量.左值表示存

C 语言中的左值和右值。以及对比数组名和指针取数组元素的区别。

左值:出现在赋值符左边的符号有时称为左值. 右值:出现在赋值符右边的符号有时称为右值. 编译器为每个变量分配一个地址(左值),这个地址在编译时可知,而且该变量在运行时一直保存于这个地址.相反,存储于变量中的值(它的右值)只有在运行时才可知.如果需要用到变量中存储的值,编译器就发出指令从指定地址读入变量值并将它存于寄存器. 可以看到,每个符号的地址在编译时可知. 对比一下几个式子: //常规变量 int a=1;//这里a作为左值出现,代表的是地址,即在a表示的这个内存地址存入数值1.即a代表的内

将引用作为函数返回值的优缺点

格式:类型标识符 &函数名(形参列表及类型说明){ //函数体 }好处:在内存中不产生被返回值的副本:(注意:正是因为这点原因,所以返回一个局部变量的引用是不可取的.因为随着该局部变量生存期的结束,相应的引用也会失效,产生runtime error!注意事项:(1)不能返回局部变量的引用.这条可以参照Effective C++[1]的Item 31.主要原因是局部变量会在函数返回后被销毁,因此被返回的引用就成为了"无所指"的引用,程序会进入未知状态.(2)不能返回函数内部new