如果变量 a 和 b 分别为 double 类型和 int 类型,则表达式 (a = 6, b = 3 * (7 + 8) / 2, b += a) 的计算结果为( )。
看到逗号表达式别慌,先记住它本质是‘按顺序执行一串动作,最后只留下最后一个动作的结果’。这题就是让你一步步看变量怎么变,最后取b的值。
最容易栽在两个地方:一是把逗号当普通分隔符,以为只执行了a=6就停了,或者误以为结果取第一个子表达式的值;二是算出b=22后,看到a是double就下意识想‘会不会变成22.0+6.0=28.0’,其实b+=a里的a会被隐式转成int再参与运算,所以结果还是整数28。别被类型名吓住,按顺序算准了就行。
GESP五级《C++编程》第3章“数据类型与表达式”第3节,核心考逗号表达式的求值规则与类型转换。命题人特意把a设为double、b设为int,就是想挖坑:很多考生看到a是double,就以为后面的运算会涉及浮点,从而选错;或者只关注第一个赋值a=6,误以为逗号表达式的结果就是6。其实逗号表达式是从左到右依次执行每个子表达式,整个表达式的值等于最后一个子表达式的值。
逗号表达式(e1, e2, ..., en)就像一串指令:先跑e1,再跑e2……最后跑en。不管前面跑了多少,它最终只“吐”出en的值。这里en就是b+=a。