以下代码输出什么?
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。
- 无类型常量(untyped constants):例如
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。