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);与原表达式也不一样。
如果再省略内括号的话,差别更大。**
上面程序运行的结果。