2

我有这样的代码:

type ErrNegativeSqrt float64

为什么这样的构造可用?

float64(ErrNegativeSqrt(-2))

哪个“机制”用于存储 -2 ErrNegativeSqrt

4

3 回答 3

4

ErrNegativeSqrt是一个type非变量。值存储在变量中。

type ErrNegativeSqrt float64
// x is a variable of type ErrNegativeSqrt with an initial value of -2
var x ErrNegativeSqrt = -2

更新:

Go 编程语言规范

常数

有布尔常量、符文常量、整数常量、浮点常量、复数常量和字符串常量。字符、整数、浮点数和复数常量统称为数值常量。

常量值由符文、整数、浮点数、虚数或字符串文字、表示常量的标识符、常量表达式、结果为常量的转换或某些内置函数的结果值表示诸如 unsafe.Sizeof 等函数应用于任何值,cap 或 len 应用于某些表达式,real 和 imag 应用于复数常量,复数应用于数值常量。布尔真值由预先声明的常量 true 和 false 表示。预先声明的标识符 iota 表示一个整数常量。

数字常量表示任意精度的值并且不会溢出。

常量可以有类型或无类型。文字常量、true、false、iota 和某些仅包含无类型常量操作数的常量表达式是无类型的。

常量可以通过常量声明或转换显式地赋予类型,或者在用于变量声明或赋值或作为表达式中的操作数时隐式赋予。

转换

转换是 T(x) 形式的表达式,其中 T 是一个类型,x 是一个可以转换为 T 类型的表达式。

ErrNegativeSqrt(-2)是一种转换。无类型常量-2被转换为类型ErrNegativeSqrt,因为作为操作数,它可以在ErrNegativeSqrtfloat64基础类型中表示。

于 2013-07-03T18:08:58.497 回答
1

ErrNegativeSqrt(-2) 是可能的,因为 ErrNegativeSqrt 在内部是一个 float64,规范将其描述为能够保存“IEEE-754 64 位浮点数”。

http://en.wikipedia.org/wiki/IEEE_floating_point

于 2013-07-03T18:35:45.507 回答
1

这称为转换,请参见此处: http: //golang.org/ref/spec#Conversions。它描述了如何通过在兼容时将另一个值转换为该类型来创建一个值。而这里的 -2 可以表示为 float64。

于 2013-07-03T18:45:58.427 回答