golang中的iota

iota在常量声明语句中,iota往往用于声明连续的整型常量。iota的取值与其出现的位置强相关。

关于iota的取值规则,有些书上或博客中给出了类似下面的描述

1.iota在const关键字出现时被重置为0

2.const声明块中每新增一行,iota值自增1

实际上从编译器的角度看iota,其取值规则只有一条:

iota代表了const声明块的行索引(下标从0开始)。


这样理解更贴近编译器的实现逻辑,也更准确。除此之外,const声明还有一个特点,即如果为常量指定了一个表达式,但后续的常量没有表达式,则继承上面的表达式。
接下来,我们根据这个规则来分析一个复杂的常量声明:

const(
bit0,mask0= 1<< iota,1<<iota - 1       //const声明第0行,即iota==0 
bit1, maskl                             // const声明第1行,即iota==1,表达式继承上面的语句
_ , _                                  //const声明第2行,即iota==2
bit3, mask3                            //const声明第3行,即iota==3
)

0.第0行的表达式展开即bit0,mask0 = 1 << 0 , 1<< 0 - 1,所以bit0 == 1,mask0 == 0。

1.第1行没有指定表达式继承第一行,即bit1,mask1 = 1 << 1, 1 << 1 - 1,所以bit1==2,

mask1 == 0 ;

2.第二行没有定义常量

3.第三行没有指定表达式继承第一行,即bit3 , mask3 = 1 << 3, 1 << 3 - 1,所以bit3 == 8,

mask3 == 7。
 

iota的本质,它仅代表常量声明的索引,所以它会表现出以下特征:

单个const声明块中从0开始取值;
单个const声明块中,每增加一行声明,iota 的取值增1,即便声明中没有使用iota也是如此;
单行声明语句中,即便出现多个iota,iota的取值也保持不变。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值