关于c++中,左值和右值问题

y=5*x++;这个表达式显然是正确的,但是--x--;表达式错误的原因,请达人帮忙解释一下在C++中,帮忙解释一下--x--不正确的原因。提示:从左值右值的角度... y=5*x++;这个表达式显然是正确的,但是--x--;表达式错误的原因,请达人帮忙解释一下
在C++中, 帮忙解释一下--x--不正确的原因。
提示:从左值右值的角度
展开
 我来答
amote258
2010-08-29 · TA获得超过1965个赞
知道小有建树答主
回答量:1101
采纳率:0%
帮助的人:954万
展开全部
++ --他们具有相同的优先级
所以 --x-- x两边的-- 就有相同的优先级,无法判断 先执行那边。
而5*x++;的 乘法 和 -- 优先级不一样,有先后

1级优先级 左结合
() 圆括号 [] 下标运算符 -> 指向结构体成员运算符 . 结构体成员运算符
2级优先级 右结合
! 逻辑非运算符 ~ 按位取反运算符 ++ 自增运算符 -- 自减运算符 - 负号运算符 (类型) 类型转换运算符 * 指针运算符 & 地址与运算符 sizeof 长度运算符
3级优先级 左结合
* 乘法运算符 / 除法运算符 % 取余运算符
4级优先级 左结合
+ 加法运算符 - 减法运算符
5级优先级 左结合
<< 左移运算符 >> 右移运算符
6级优先级 左结合
<、<=、>、>= 关系运算符
7级优先级 左结合
== 等于运算符 != 不等于运算符
8级优先级 左结合
& 按位与运算符
9级优先级 左结合
^ 按位异或运算符
10级优先级 左结合
| 按位或运算符
11级优先级 左结合
&& 逻辑与运算符
12级优先级 左结合
|| 逻辑或运算符
13级优先级 右结合
? : 条件运算符
14级优先级 右结合
=+ =- =* =/ =% = >= < <= &= ^= |= 全为赋值运算符
15级优先级 左结合
, 逗号运算符
qq229596421
2012-05-17
知道答主
回答量:7
采纳率:0%
帮助的人:5098
展开全部
你可以试试这样两条语句:
--x++;//该语句报错是内容是'--' needs l-value
++x--;//该语句报错是内容是'++' needs l-value

你会发现编译器报错说的都是前面的那个运算符报错,前面那个运算符需要一个左值。

x++和x--都是在执行该条语句之后才改变值的。也就是说在该条语句执行完之前x++和x--都是一个右值。

所以当对一个右值前加或者前减的时候自然会报错。。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
gavinraymond
2010-08-29 · TA获得超过293个赞
知道小有建树答主
回答量:530
采纳率:0%
帮助的人:291万
展开全部
你说的是什么意思啊,是不是把X++换成--X--啊,是的话就是歧义错误,要用()来作用处理的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
琼头浪子
2010-08-29 · TA获得超过602个赞
知道小有建树答主
回答量:211
采纳率:0%
帮助的人:217万
展开全部
(--x)--等价于(x-1)--,等价于(x-1)=(x-1)-1;这显然是不行的,因为等号的左边必须是变量,而不能是表达式
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lnkm
2010-08-29 · 超过25用户采纳过TA的回答
知道小有建树答主
回答量:769
采纳率:0%
帮助的人:160万
展开全部
--是左结合的,所以--x--等价于--(x--)。

x--返回x的拷贝,然后x自减1。

返回的拷贝属于右值,是不能改变的,所以错了。

而第一个表达式正式把它当右值,所以没错。

另外,根据优先级,第一个表达式相当于y=5*(x++)。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式