mirror of
				https://github.com/gopl-zh/gopl-zh.github.com.git
				synced 2025-10-31 18:21:36 +00:00 
			
		
		
		
	| @@ -37,7 +37,7 @@ fmt.Println(5 / 9 * (f - 32))     // "0";   5/9 is an untyped integer, 0 | ||||
| fmt.Println(5.0 / 9.0 * (f - 32)) // "100"; 5.0/9.0 is an untyped float | ||||
| ``` | ||||
|  | ||||
| 只有常量可以是无类型的。当一个无类型的常量被赋值给一个变量的时候,就像上面的第一行语句,或者是像其余三个语句中右边表达式中含有明确类型的值,无类型的常量将会被隐式转换为对应的类型,如果转换合法的话。 | ||||
| 只有常量可以是无类型的。当一个无类型的常量被赋值给一个变量的时候,就像下面的第一行语句,或者出现在有明确类型的变量声明的右边,如下面的其余三行语句,无类型的常量将会被隐式转换为对应的类型,如果转换合法的话。 | ||||
|  | ||||
| ```Go | ||||
| var f float64 = 3 + 0i // untyped complex -> float64 | ||||
| @@ -69,7 +69,7 @@ const ( | ||||
| ) | ||||
| ``` | ||||
|  | ||||
| 对于一个没有显式类型的变量声明语法(包括短变量声明语法),无类型的常量会被隐式转为默认的变量类型,就像下面的例子: | ||||
| 对于一个没有显式类型的变量声明(包括简短变量声明),常量的形式将隐式决定变量的默认类型,就像下面的例子: | ||||
|  | ||||
| ```Go | ||||
| i := 0      // untyped integer;        implicit int(0) | ||||
| @@ -78,7 +78,9 @@ f := 0.0    // untyped floating-point; implicit float64(0.0) | ||||
| c := 0i     // untyped complex;        implicit complex128(0i) | ||||
| ``` | ||||
|  | ||||
| 注意默认类型是规则的:无类型的整数常量默认转换为int,对应不确定的内存大小,但是浮点数和复数常量则默认转换为float64和complex128。Go语言本身并没有不确定内存大小的浮点数和复数类型,而且如果不知道浮点数类型的话将很难写出正确的数值算法。 | ||||
| 注意有一点不同:无类型整数常量转换为int,它的内存大小是不确定的,但是无类型浮点数和复数常量则转换为内存大小明确的float64和complex128。 | ||||
| 如果不知道浮点数类型的内存大小是很难写出正确的数值算法的,因此Go语言不存在整型类似的不确定内存大小的浮点数和复数类型。 | ||||
|  | ||||
|  | ||||
| 如果要给变量一个不同的类型,我们必须显式地将无类型的常量转化为所需的类型,或给声明的变量指定明确的类型,像下面例子这样: | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user