如果 a、b 和 c 都是 int 类型的变量,下列哪个语句不符合 C++ 语法?( )
这题考的是运算符的语法合法性,不是运算结果。拿到题先别急着算,把每个选项里的符号拆开看:赋值号右边必须是合法的表达式;自增号只能粘在单个变量屁股后面。只要一眼看出哪个符号被‘拆散’用了,答案就出来了。
最容易被坑的是把自增号当成普通加号,觉得 a ++ b 就是 a 加 b。其实 ++ 是一元运算符,它要么前缀要么后缀,中间不能加空格也不能接另一个变量。还有人会纠结选项 C 的连等,以为赋值不能连用,其实 C++ 里赋值表达式本身有返回值,所以 c = a = b 完全合法,只是初学者容易在语义上绕晕,反而忽略了 D 这种纯粹的语法错误。
【考点】运算符语法合法性|一元运算符与二元运算符的区分|赋值表达式的返回值
命题人在这里挖的坑非常典型:把初学者容易混淆的符号混在一起,尤其是自增运算符 ++ 和加法运算符 +。在 C++ 里,++ 是一元运算符,它只能紧贴在一个变量的后面(后缀形式,如 a++)或者前面(前缀形式,如 ++a),绝对不能拆成两个部分去夹着别的变量或运算符。而 + 是二元运算符,可以连接两个表达式。选项 D 写成了 a ++ b,这里 ++ 被强行拆开了,左边是 a,右边是 b,这在语法上是完全不允许的,编译器会直接报错,所以 D 一定不符合语法。
再看其他选项。A 和 B 都是标准的二元运算,a + b 合法,c += a + b 也是合法的复合赋值。C 选项 c = a = b 看似奇怪,但很多人会误以为赋值不能连等。其实 C++ 里赋值运算符是右结合的,而且赋值表达式本身是有返回值的(返回被赋的值)。所以 a = b 先执行,返回 b 的值,再把这个值赋给 c,整个过程语法完全正确。
解题时,拿到这种单选题,第一步不要急着代入数值去算结果,因为题目问的是‘不符合语法’,跟数值没关系。第二步要把每个选项里的运算符拆开看:这个符号是一元的还是二元的?如果是二元运算符,它两边是不是都有合法的表达式?如果是一元运算符,它是不是粘在一个变量上了?用这个‘拆符号’的眼光去扫描,D 项里的 ++ 明显被拆散了,答案就呼之欲出。这种视觉陷阱是 GESP 一级最爱考的,提醒同学们平时刷题时多留意运算符的形态,别只盯着运算结果。
关于考频,基础语法这个大类在题库里非常密集,总共考过 1295 题,覆盖 2008 到 2026 年所有级别。从逐年分布看,2023 年有 287 题,2024 年 413 题,2025 年 401 题,2026 年 109 题,数据量巨大,说明这类题目是高频考点。细分到变量与常量,考过 77 题,其中 GESP 一级就占了 40 题;基本数据类型考过 267 题,GESP 一级也有 81 题。这些数据都指向一个趋势:GESP 一级对基础语法的考察力度非常大,而且近年来(2023-2026)考得更多。
预测方面,既然基础语法在一级里占比这么高,且近年考频持续上升,未来很可能还会继续出这种‘找语法错误’的题目,比如把自增、取地址等一元运算符拆开,或者把逗号运算符用错位置。暂无足够依据预测具体年份的题号,但备考时务必把运算符的语法形态练熟,这是拿分的关键。