C++Primer4.33节练习

C++Primer4.33节练习

1、题目:someValue?++x,++y:–x,–y
根据优先级和结合律对运算对象和运算符进行组合。
得到的结果如下
((someValue?++x,++y:–x),–y);
因为条件运算符(?:)和逗号运算符都规定了运算对象的求值顺序,都是从运算符的左侧运算对象开始计算。
在编译器上的程序如下
在这里插入图片描述
①先设置好someValue的值——true或者false,x和y的值随意设置。

②解析表达式,首先根据someValue的值判断条件,这里是true,所以选择的是++x,++y,x变成了1,y变成了2。再根据逗号运算符的求值顺序,计算完了第二个逗号左侧的运算对象,接着是右侧运算对象–y,这时候y从2变成了1。

③如果要求整个表达式的值,就等于第二个逗号运算符的结果。第二个逗号运算的结果等于其右侧表达的值,由上可知值为1。所以整个表达式的值等于1.

④将表达式的值输出到屏幕上,可利用赋值语句,将表达式的值赋予一个变量,再将其输出。
或直接使用cout输出。
注意:这里表达式最外面的括号不可省略,因为如果使用赋值语句,赋值运算符的优先级大于逗号运算符,那么这里的j就变成j=(i?++x,++y:–x);与原表达式不一样。

如果使用的是直接使用cout输出,因为<<运算符的优先级大于条件运算符和逗号运算符,变成
了只有cout<<(i?++x,++y:–x);与原表达式也不一样。

如果再省略内括号的话,差别更大。**

上面程序运行的结果。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值