www.dbpj.net > C++多个三目运算符构成的表达式,如何求值?结合顺序或原则?

C++多个三目运算符构成的表达式,如何求值?结合顺序或原则?

由后面两个操作数来决定 例如:2==1?"1":"2" 这个表达式就是字符串类型2>1?1:2 这就是整型的 而且后面两个操作数的类型必须一样

这里涉及了C中的优先级、结合性、求值顺序.结合性只有在相同优先级的运算符间才起作用,比如a+b*c,+与*优先级不同,这里根本不用去管结合性.而a+b+c则需要进行结合性考虑了,如果+为左结合性,那么应该理解为:(a+b)+c,如

z *= y++ + 5;这条语句的运算顺序与例子中的语句运算顺序是不一样的,它是先取y后再执行y++的,即z=z*(y+5);然后执行y=y+1.

结果为AX-- 先比较再运算Y++ 也是先比较后运算不过对此题没有影响的因为种种原因12.5过大

运算优先级不同,单目运算符级别>双目>三目.

当然是从左到右了.先判断表达式1,若满足,就执行2,否则执行3.

三目运算符是?:结构的运算 所谓三目就是需要三个变量对能进行运算的操作 举个简单的例子:a=2>1?3:4 可分成几个部分,用括号分开:(a=)(2>1)?(3):(4) 最左边是赋值操作 第二个部分是一个判断 第三和第四部分是两个常数 首先判断第三部分是否成立,成立即选择第三部分,否则选择第四部分 像上面那个2>1成立,所以就执行了a=3 这种运算还可以嵌套 比如判断year是不是闰年,是则返回1,不是返回0 year=(year%100==0)?(year%400==0?1:0):(year%4==0?1:0)

楼主注意,结合顺序不等于求值顺序.条件表达式的求值顺序是这样规定的:test ? exp1 : exp2;条件测试部分test非零,表达式exp1被求值,否则表达式exp2被求值,并且保证exp1和exp2两者之中只有一个被求值.该运算符是右结合的值是要

三目运算的时候自动做了隐式转换,int 4字节,double 8字节.隐式转换都是小的转成大的,为了对齐.所以结果是8

编译器把b+++b解释成(b++) + b,你加了个空格就解释成b + (++b),这个很自然.b = 7,则b++返回7,++b返回8,所以第一个结果35,第二个36

网站地图

All rights reserved Powered by www.dbpj.net

copyright ©right 2010-2021。
www.dbpj.net内容来自网络,如有侵犯请联系客服。zhit325@qq.com