go
package main import ( "fmt" "reflect" ) const ( cmask = 127 ) func main() { var u uint8 u = 22 r1 := u + cmask fmt.Println(r1) fmt.Println(reflect.TypeOf(cmask)) // int //------------------ mask := 0x7f //r2 := u + mask //fmt.Println(r2) fmt.Println(reflect.TypeOf(mask)) // int }
cmask 和 mask 反射出来的类型都是 int。为什么 cmask 可以和u进行操作,而 mask 不行 ???
原因详见 Go 的语法说明:
换人话来说就是:使用没指定类型的 const,就相当于直接使用它对应的常量。
所以你写
u + cmask
就相当于写了u + 127
,于是不会保存。而 mask 是个普通变量,没有这种特殊待遇,类型是在声明时就固定了(int
),因此会因为int
和uint8
不兼容而报错。