【发布时间】:2015-04-19 15:47:53
【问题描述】:
ch := make(chan int, 10)
fmt.Println(cap(ch))
是函数调用cap(ch)常量还是求值?
golang 规范说:
如果 s 是字符串常量,则表达式 len(s) 是常量。如果 s 的类型是数组或指向数组的指针并且表达式 s 不包含通道接收或(非常量)函数调用,则表达式 len(s) 和 cap(s) 是常量;在这种情况下,不评估 s。否则,对 len 和 cap 的调用不是常量,并且会评估 s。
似乎是评估。
【问题讨论】:
-
它在一般情况下被评估,尽管在这个特定的例子中,如果编译器将它优化为一个常量,我不会感到惊讶。
-
@Evan OP 询问在频道上调用
cap()是否是一个常量表达式,因为在某些地方只允许使用常量表达式。即使编译器可以将对cap()的调用优化为常量,也不会使调用成为常量表达式。
标签: go