ch := make(chan int, 10)
fmt.Println(cap(ch))
是函數調用cap(ch)
恆定或評價?通道上的cap()不是常量?
golang規格說:
表達LEN(s)爲常數如果s是字符串常量。如果s的類型是數組或指向數組的指針並且表達式s不包含通道接收或(非常量)函數調用,則表達式len(s)和cap(s)是常量;在這種情況下,s不被評估。否則,len和cap的調用不是常量,而是s被評估。
似乎是評估。
ch := make(chan int, 10)
fmt.Println(cap(ch))
是函數調用cap(ch)
恆定或評價?通道上的cap()不是常量?
golang規格說:
表達LEN(s)爲常數如果s是字符串常量。如果s的類型是數組或指向數組的指針並且表達式s不包含通道接收或(非常量)函數調用,則表達式len(s)和cap(s)是常量;在這種情況下,s不被評估。否則,len和cap的調用不是常量,而是s被評估。
似乎是評估。
是,cap()
當應用於信道,作爲一個信道的容量不會在型編碼,並因而在編譯時未知的是不恆定的。
當然調用帽(CH)評價只是因爲,
ch := make(chan int, 10)
fmt.Println(cap(ch))
ch = make(chan int, 9)
fmt.Println(cap(ch))
它在一般情況下被評估,儘管在這個特殊的例子,我也不會,如果編譯器吃驚優化成一個常數。 – Evan
@Evan OP詢問一個通道上調用cap()是否是一個常量表達式,因爲有些地方只允許使用常量表達式。即使編譯器可以將對'cap()'的調用優化爲常量,也不會使該調用成爲常量表達式。 – fuz