[(1,2)*2]*3 在 C++ 中是合法的表达式。( )
这题考的是运算符优先级与语法合法性。拿到题先别急着算数,一眼看结构:最外层是[...]*3,说明[...]整体被当作下标运算。C++里[]是下标运算符,不是普通括号,它左边必须紧跟一个完整表达式。
学生最容易把[]当成普通括号去分组,觉得[(1,2)*2]就是给(1,2)*2加个括号,算出4再乘3得12,就选A。其实命题人挖的就是这个坑:逗号运算符(1,2)先取1再取2得2,2*2=4,但[]作为下标运算符要求左侧是表达式,而这里[]左边是左括号,词法分析阶段就非法了。
【考点】运算符优先级与语法结构(下标运算符 vs 括号分组)
这道题考查的是C++中运算符优先级与语法合法性的边界判断。命题人专门挖这个坑,就是看考生是否真正理解[]的下标运算本质——它只接受整数索引,且作为一元运算符使用时,必须紧跟一个完整表达式,不能裸用做普通括号分组。
拿到题先拆解结构:[(1,2)*2]*3。关键观察:[(1,2)*2]整体被当作下标运算,下标部分是(1,2)*2。逗号运算符(1,2)先算1再算2,返回2;然后2*2=4。但整个下标表达式结果是整数4,语法上看似可行——等等,真正致命的是:[]是下标,不是括号分组!C++里[]必须紧跟表达式,不能裸用做括号。所以[(1,2)*2]*3在词法分析阶段就非法了。
错误选项A的设计套路:考生看到(1,2)*2算出4,4*3=12,数值运算没问题,就误以为表达式合法。命题人利用的是“重计算轻语法”的思维惯性。最阴险的细节是[]被误认为普通括号——其实它是一元下标运算符,要求左侧必须是完整表达式。如果只背“括号可分组”而不理解运算符本质,就会栽在这里。
反命题思维:如果把题目改成(1,2)*2*3,去掉一层[],答案就变成正确了,因为逗号运算符+乘法都是合法表达式。刷到类似题先自问:这层括号是分组符号还是下标运算符?如果是下标,里面必须是整数或可转换类型。
考频与趋势:基础语法考过1295题,其中GESP四级186题,2023年287题,2024年413题,2025年401题,2026年109题,逐年上升且四级占比稳定;本题属于此类陷阱题,未来仍会高频出现,尤其侧重下标与逗号运算符的混淆。
暂无足够依据预测具体新题型,但可预期命题人会继续用[]伪装括号分组,或在逗号运算符后嵌套下标运算。