Go 中文网、思否、博客园等平台,内容主要以问答形式记录。如果回答中有错误,欢迎大家指出,共同学习、共同进步。
Go每日一题_171
以下代码输出什么? package main import ( "fmt" ) func main() { var ans float64 = 15 + 25 + 5.2 fmt.Println(ans) } A:不能编译; B:45; C:45.2; D:45.0 🔑 答案解析: C 在线运行 解析 1. 常量表达式 常量表达式是指仅包含常量操作数,且在编译时进行计算的表达式。 常量可以是: 无类型常量(untyped constants):例如 1、2、5.2。 有类型常量(typed constants):例如 const b int8 = 3。 字面值常量:例如 1、2、5.2。 具名常量:例如 const a = 1 + 2。 2. 无类型常量的默认类型 无类型常量虽然没有明确的类型,但它们有一个默认类型: 整数型字面量(如 15、25)的默认类型是 int。 浮点数字面量(如 5.2)的默认类型是 float64。 字符串字面量的默认类型是 string。 布尔字面量的默认类型是 bool。 复数字面量的默认类型是 complex128。 3. 类型推断 Go 语言支持类型推断。如果上下文没有明确的类型,编译器会将无类型常量视为其默认类型。 在常量表达式中,如果操作数包含不同类型的无类型常量,结果会按照以下优先级推断类型: 整数 < rune < 浮点数 < 复数。 4. 题目中的常量表达式 var ans float64 = 15 + 25 + 5.2 15 和 25 是无类型整数常量,默认类型是 int。 5.2 是无类型浮点数常量,默认类型是 float64。 在常量表达式中,由于 5.2 是浮点数常量,整个表达式的结果会被推断为浮点数类型(float64)。 运算过程 15 + 25 的结果是 40,仍然是无类型整数常量。 40 + 5.2 的结果是 45.2,由于 5.2 是浮点数常量,整个表达式的结果被推断为 float64 类型。 赋值与输出 最终结果 45.2 被赋值给变量 ans,其类型为 float64。 fmt.Println(ans) 输出 45.2。