看板 C_and_CPP 關於我們 聯絡資訊
剛剛學到constexpr這個關鍵字,不過看了很久不是很了解使用的時機。 依照這個網頁: http://en.cppreference.com/w/cpp/language/constant_expression 似乎是可以在等號右邊放function的const? 不知道前輩們有無進一步的見解? 感謝。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 90.41.64.229 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1431006723.A.67D.html
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