左值可以作为右值,但右值不可以是左值。 因此也只有左值才能被取地址。 2、举两个问题: int i = 0; (i++)+=i; //错误 (++i)+=i; //正确 int *ip = &(i++); //错误 int *ip = &(++i); //正确 3、为什么i++不能作左值? 我们来看i++和i++的实现就明白了。 1 2 3 4 5 6 /...
a就是左值,5就是右值。 当然,如果真是这么个含义,那么这概念就相当蛋疼了。其实不是这样的~~ 左值其实是对一块内存区域的引用(这个还不是C++中的int &a之类的引用),比如上边的a,就对应了一块内存区域(起始地址为&a,大小为sizeof(int))。 更专业的定义在这里: Anobjectis a region of storage that can ...
恰好,左值的定义是:具名(即,具有名称)的存储空间。所以++i是左值。
int i = 0; int &j = i; // 合法,左值引用指向一个左值 ++i += i; // 合法,++i...
原本一直对i++和++i的区别不是很在意,觉得i++就是先用了i的值(用于赋值之类的操作),再i自加1.而+
i++和++i都是C++中的自增运算符,它们都可以作为右值,但只有++i可以作为左值。当一个运算符可以作为左值时,它可以出现在赋值语句的左边,例如:++i = 5;。这个语句将把5赋给i,并且将i的值增加1。而i++不能作为…
++i是左值,但i++不是左值A.正确B.错误的答案是什么.用刷刷题APP,拍照搜索答疑.刷刷题(shuashuati.com)是专业的大学职业搜题找答案,刷题练习的工具.一键将文档转化为在线题库手机刷题,以提高学习效率,是学习的生产力工具
为什么(i++)不能做左值,而(++i)可以 算下来已经很久以前了,大概有那么几个星期了吧。看到了帖子上有人问为什么下面的语句的对错原因 int i = 0; int *ip = &(i++); //错误 int *ip = &(++i); //正确 看到上面的语句,当时以为两个都是是对的啊,可是当我用VS2010的编译器试了试之后,才发现...
++i在运算过程中不产生临时对象,返回的就是i,是个左值,类似++i=1这样的表达式是合法的,而i++在运算的过程中会产生临时对象,返回的是零时对象的值,是个右值,像i++=1这样的表达式是非法的 对于内置类型,单独的i++和++i语句,现在的编译器基本上都会优化成++i,所以就没什么区别了 ...
因为++i 是后面一步才赋值的,所以它能够当作一个变量进行级联赋值,++i = a =b,即 ++i 是一个左值;i++ 的后面一步是自增,不是左值。 3 ++i 和i++ 的使用,一般来说在循环域里面,这两者并没有什么很大的区别,因为编译器一般都会给你做优化。但是要注意其生存周期,以及很难察觉的写脏,就好像指针...