C++ 表达式 (2 * 3) || (2 + 5) 的值为 $67$。
这题考 C++ 运算符优先级和逻辑或的返回值。拿到题先算括号里的算术结果,再想逻辑或只返回 0 或 1,绝不拼接数字,就能一眼看穿 67 是哪里来的。
学生最容易掉进两个坑:一是把逻辑或当成字符串连接符,以为 6 和 7 拼起来就是 67;二是分不清 C++ 里逻辑运算结果类型,误以为会输出原数字。其实 C++ 的 || 永远返回布尔值,非零即 true 输出 1,零即 false 输出 0。
本题考查 GESP 二级《C++ 程序设计》中运算符优先级与逻辑表达式求值规则。命题人把 || 放在算术运算之后,就是想卡住"认为逻辑或能拼接数字"或"不知道逻辑或返回 0/1"这两大盲点。
看到括号先算:(2*3)=6,(2+5)=7。接着处理逻辑或:6 || 7。在 C++ 中,逻辑或运算符 || 的优先级低于算术运算符,所以先完成括号内的计算。但关键在这里:C++ 的逻辑运算结果永远是布尔值,true 输出为 1,false 输出为 0。因为 6 和 7 都非零,视为真,所以 6 || 7 的结果是 true,即数值 1。
A 选项"值为 67"是怎么来的?命题人把 || 偷换成字符串连接符(像 Pascal 的 + 或某些语言的 &),诱导学生把 6 和 7 拼成 "67",再误以为直接输出 67。最阴险的细节是题目说"值为 67",这根本不是 C++ 逻辑或能产生的结果——C++ 的 || 永远输出 0 或 1。只背"|| 是逻辑或"而不理解输出规则,就会掉坑。如果误以为先算 6 || 2 再 + 5,会得到 7 或 1,也凑不出 67——说明 67 这个数字本身就是"连接"的影子。
如果把 || 换成 +,(6) + (7) = 13;如果改成字符串连接 std::to_string(6) + std::to_string(7),结果才是 "67"。刷到类似题,先问自己"这个运算符在 C++ 里到底返回什么类型",再决定要不要拼接。
"基础语法"在题库中高频出现,2023 年考了 287 题,2024 年 413 题,2025 年 401 题,2026 年 109 题,呈现逐年上升后的稳定高位态势;"C++ 程序设计"2023 年 61 题,2024 年 103 题,2025 年 72 题,保持活跃。这类运算符优先级与逻辑判断的混合题在二级考试中属于经典考点,每年必现,且命题人喜欢在"值"的描述上挖坑(如本题的 67),让学生误判类型。
基于近年"基础语法"和"C++ 程序设计"的高频趋势,预计未来二级考试中,类似"运算符优先级 + 返回值类型"的陷阱题仍会持续出现,但可能会进一步结合输入输出或简单函数调用,增加一层干扰(例如让考生误以为逻辑运算会保留原数值)。暂无足够依据预测具体数字或变体形式,但"值"的描述陷阱大概率会保留。