常量
2 分钟阅读
Constants 常量
有布尔常量、符文常量、整数常量、浮点常量、复数常量和字符串常量。符文、整数、浮点和复数常量统称为数值常量。
常量值由一个符文字面量、整数字面量、浮点数字面量、虚数字面量或字符串字面量,表示常量的标识符,常量表达式,结果为常量的转换,或一些内置函数的结果值表示,如unsafe.Sizeof应用于某些值,cap或len应用于一些表达式,real和imag应用于复数常量,complex应用于数值常量。布尔真值由预先声明的常数true和false表示。预先声明的标识符iota表示一个整数常量。
通常,复数常量是常量表达式的一种形式,将在该节中讨论。
数值常量表示任意精度的精确值,不会溢出。因此,不存在表示IEEE-754负零、无穷大和非数字值的常量。
常量可以是有类型的的或无类型的。字面常量、true、false、iota,以及某些只包含无类型的常量操作数的常量表达式是无类型的。
常量可以通过常量声明或转换显式地给出类型,也可以在变量声明、赋值语句 、作为表达式的操作数时,隐式赋予类型。如果常量值不能被表示为相应类型的值,那就是一个错误。如果类型是一个类型参数,常量将被转换为类型参数的一个非常量值。
一个无类型常量有一个默认的类型,该类型是在需要类型化值的上下文中隐式转换为的类型,例如,在一个短变量声明中,如i := 0,没有明确的类型。无类型常量的默认类型分别是bool, rune, int, float64, complex128或string,具体取决于它是一个布尔型常量、rune型常量、整数型常量、浮点型常量、复数型常量还是字符串型常量。
实现限制:尽管数值常量在语言中具有任意的精度,但编译器可以使用有限精度的内部表示法来实现它们。也就是说,每个实现都必须:
- 用至少256位来表示整数常量。
- 用至少256位的尾数和至少16位的有符号二进制指数来表示浮点常量,包括复数常量的对应部分。
- 如果不能精确表示一个整数常量,则给出一个错误。
- 如果由于溢出而无法表示一个浮点常量或复数常量,则给出一个错误。
- 如果由于精度的限制,无法表示一个浮点常量或复数常量,则四舍五入到最接近的可表示常量。
这些要求既适用于字面常量,也适用于常量表达式的计算结果。