2015-03-25 29 views
6
let arr0 = [0u8; 15]; 
let arr1 = [0u8; arr0.len()]; // this fails 

我認爲編譯器應該能夠確定arr0的長度,編譯時間常數,不是嗎?不過這被標記爲錯誤,表示找到的變量而不是常量整數。爲什麼我不能使用返回編譯時常量的函數作爲常量?

  1. 爲什麼?
  2. 是否有鏽constexpr(C++)函數?

版本:

rustc 1.0.0-nightly (ecf8c64e1 2015-03-21) (built 2015-03-22) 

回答

15

因爲還沒有實現。擴展鏽則計爲常量表達式可以向後兼容所做的子集,所以沒有急於1.0之前這樣做,它甚至沒有解決,應該怎麼做(多少應該被允許,是否應該有一個constexpr機制和它應該是多麼強大等)。

與此同時,宏和語法擴展覆蓋許多相同的用例(後者嚴格小於constexpr更強大的永遠不會是)。

+0

沒有急於有時間把事情做對,所以這是從長遠來看,希望更好 – bluss 2015-03-25 23:55:09

相關問題