执行下面代码后,b 的值会是( )。
int b = 8;
++b *= 2 + 1;看到 ++b *= 2 + 1 先想运算符优先级:前缀 ++ 比 *= 高,所以先执行 ++b 得到 9,再执行 9 *= 3 即 b = 9 * 3 = 27。这类题通法是:遇到复合赋值,先算左操作数,再算右操作数,最后执行赋值。
错误选项 A(18) 把 ++b 当成 b++ 后置,先乘后增;B(17) 误以为 ++b 只加 1 且 *= 优先级更高;C(19) 把 2+1 算成 3 却忘了左操作数已变 9。陷阱在于 ++b 是前缀,先自增再参与运算,而 *= 是复合赋值,整体先算左操作数。
考纲定位 本题考查 GESP 一级 C++ 大纲中"运算符优先级与结合性"核心考点。命题人专门设置这道题,就是要卡住那些只背口诀、不懂表达式求值顺序的考生。
解题思维 看到 ++b *= 2 + 1 先想运算符优先级:前缀 ++ 比 *= 高,所以先执行 ++b 得到 9,再执行 9 *= 3 即 b = 9 * 3 = 27。这类题通法是:遇到复合赋值,先算左操作数,再算右操作数,最后执行赋值。
陷阱拆解 错误选项 A(18) 把 ++b 当成 b++ 后置,先乘后增;B(17) 误以为 ++b 只加 1 且 *= 优先级更高;C(19) 把 2+1 算成 3 却忘了左操作数已变 9。陷阱在于 ++b 是前缀,先自增再参与运算,而 *= 是复合赋值,整体先算左操作数。
反命题思维 若把 ++b 改成 b++,答案变 24;若把 *= 改成 *,答案变 27 但类型不匹配;若把 2+1 改成 2-1,答案变 16。这类题本质是考表达式求值顺序,而非单纯算术。