执行 C++ 代码 cout << (12 + 12.12) 将报错,因为 12 是 int 类型,而 12.12 是 float 类型,不同类型不能直接运算。( )
答案B。C++中小数字面量默认是double类型。7.0带小数点,是double类型。
带小数点的字面量默认是double,除非加f后缀(如7.0f才是float)。
【考点】类型自动提升|浮点运算规则|数据基础
本题考查 GESP 一级 C++ 数据基础模块中的“类型自动提升”规则。命题人专门在此位置设坑,卡住那些死记“不同不能运算”口诀而不懂 C++ 隐式转换本质的考生,暴露对语言底层规则的空缺。
看到“int 与 float 直接运算报错”先警觉——C++ 对混合运算有严格类型提升规则。核心观察:整型在参与浮点运算时会自动提升为浮点型(double)。推理链:12 是 int,12.12 是 float→C++ 自动将 12 提升为 12.00→(12.00+12.12) 完全合法→输出 24.12。这一类“类型混合运算”题通法:牢记“小类型向大类型自动提升,不同浮点型向 double 提升”,再结合具体运算符判断。
选项 A“正确”是命题人精心设计的陷阱:利用“类型不同不能直接运算”的笼统口诀误导人。它偷换了“不能运算”为“报错”,却忽略了 C++ 的隐式转换机制。最阴险细节是括号内的 (12+12.12) 看似简单,实则触发类型提升流程——如果你只背“不同类型不能运算”结论而不理解自动转换本质,就会误判为编译错误。这题核心就是考你是否知道“自动提升”这一语言机制,而非机械记忆“不同不能运算”。
站在命题人视角,如果改成“12 和 12.12 都是 float 类型”,答案仍为 B;若改成"12 和'c'相加”,答案还是 B(char 提升为 int)。刷到此类题先自问:“命题人想考我类型系统还是运算符优先级?”答案永远是类型系统——任何混合运算都遵循提升规则,不存在“不能运算”的绝对说法。