码迷,mamicode.com
首页 > 其他好文 > 详细

go中的常量

时间:2015-03-01 17:16:41      阅读:135      评论:0      收藏:0      [点我收藏+]

标签:

转自:http://segmentfault.com/q/1010000002472534

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 不行 ???


huandu:

原因详见 Go 的语法说明:

If the expression values are untyped constants, the declared constants remain untyped and the constant identifiers denote the constant values.

换人话来说就是:使用没指定类型的 const,就相当于直接使用它对应的常量。

所以你写 u + cmask 就相当于写了 u + 127,于是不会保存。而 mask 是个普通变量,没有这种特殊待遇,类型是在声明时就固定了(int),因此会因为 int 和 uint8 不兼容而报错。


go中的常量

标签:

原文地址:http://my.oschina.net/u/875730/blog/381020

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!