推 LPH66: 有些地方需要編譯時期常數的可以使用宣告為 constexpr 的值 05/07 22:15
→ LPH66: 例如網頁裡開頭的例子, 模版參數非型別的需為編譯時期常數 05/07 22:16
→ LPH66: 當然能寫 constexpr 的式子就很有限 05/07 22:16
→ LPH66: 大原則是編譯時可以算得出來的值 05/07 22:16
推 kwpn: 用在變數上跟用在函式上意義差很多, constexpr函式除了可以 05/07 22:29
→ kwpn: 用在編譯期計算, 也能像一般函式在執行期計算 05/07 22:30
→ Feis: 主觀上, 我倒是覺得意義沒有差很多. 05/07 23:24
→ Feis: 倒是要分清楚 const 跟 constexpr 意義不一樣 05/07 23:27
→ Feis: constexpr 就是著眼於所有編譯期能先算出來的東西. 05/07 23:28
→ Feis: 原則上如果你能加就盡量加 xD 05/07 23:30
→ Feis: 少數不該加的情況是在於你不確定他真的可以是 constexpr 05/07 23:31
→ Feis: 你加了以後, 別人會以為他是. 之後要改的話可能會造成災難 05/07 23:32
→ Feis: constexpr 的成立條件可能依賴另一個 constexpr 05/07 23:36
→ wtchen: 所以是說constexpr = only編譯時期的常數? 05/07 23:55
→ wtchen: 那可以連static並用嗎? 如果在某物件裡宣告為 05/07 23:55
→ wtchen: static constexpr的變數可以拿到main裏面用嗎? 05/07 23:56
像是
class A{
static constexpr int var(...)
}
int main()
{
cout << A::var() ;
}
這樣用法OK嗎?
(說實話我還是不懂)
※ 編輯: wtchen (90.41.64.229), 05/07/2015 23:59:01
→ Feis: 抱歉, 我看不太懂你的問題. 不過你可以寫看看阿 05/08 00:02
→ Feis: 你這個例子比較大的問題反而是存取限制 05/08 00:03
→ wtchen: 因為說實話我也看不太懂constexpr跟const的差別 05/08 00:12
→ wtchen: 想說是不是有哪些case非要用constexpr不可的 05/08 00:12
→ Feis: 非用 constexpr 不可的通常都是函數. 05/08 00:20
→ Feis: 但是你可以想想如果 x 是個 const int, 05/08 00:21
→ Feis: 那 std::array<int, x> foo; 這行是合法的嗎 ? 05/08 00:21