下列关于 C++ 语言的叙述,正确的是( )。
这题考的是C++基础类型规则。拿到题先别急着背定义,把每个选项拆成'操作对象+操作动作+结果预期'三要素:char转int、int相乘、溢出后果、double除以0。用'隐式转换'和'未定义行为'两个关键词去套,就能一眼看出哪个符合语法。
最容易栽跟头的就是C选项。很多学生一听到'超出范围'就下意识觉得程序会崩溃或报错,这是把'未定义行为'和'运行时异常'混为一谈了。其实C++里整数溢出不会抛异常,只是结果不可预测,程序照样跑下去。D选项也容易错,以为除以0会出错,其实double除以0.0合法返回无穷大。
【考点】类型转换|整数溢出|浮点运算规则
GESP二级主要考查基础语法,命题人这次挖了四个典型坑:把char与int当成不能互转的'隔离区',把整数溢出等同于程序崩溃,把double除以0当成异常,以及混淆'必须'与'应该'。解题时先把每个选项拆成'操作对象+动作+结果预期',再用两个核心概念去套:隐式转换和未定义行为。
先看A:char是整型的一种,C++规定char隐式提升为int,赋值完全合法,所以A错。再看B:两个int相乘,结果类型仍是int,这是整数算术的基本规则,B正确。C是最阴险的,乘积超出int范围属于'未定义行为',程序不会报错或崩溃,只是结果不可预测,因此C错。D涉及浮点运算,double除以0.0是合法运算,结果为inf,不会崩溃,D也错。
思考心法:拿到这类题先问自己'考的是类型还是行为?'。如果选项里出现'超出范围',立刻联想'未定义行为';出现'除以0',立刻联想'浮点inf'。这样就不会被命题人用日常直觉误导。
避坑提醒:别把'未定义行为'当成'会崩溃',也别把'隐式转换'当成'不能赋值'。刷题时多注意区分'必须'与'应该',命题人常在这里设陷阱。