constexpr 是編譯期常數,const 只是執行期唯讀

這是 JS 完全沒有的概念(C++11 引進)。兩者都叫「不可變」,但不可變的時間點不同。

值什麼時候確定
const可以在執行期才決定——例如讀使用者輸入、呼叫函式算出結果後賦值,之後就不能改
constexpr必須在編譯期就完全確定
constexpr int MAX_SIZE = 100 * 2;   // 編譯器在打包時就直接算成 200

編譯器會把它當成常數寫死在二進位檔案裡,所以連一次記憶體寫入都不會發生——是最高等級的不可變。

換句話說,const 承諾的是「我之後不會改它」,constexpr 承諾的是「它在程式跑起來之前就已經是定值」。

const 本身的語意見 C++ 的 const 是深層不可變,JS 的 const 只防重新賦值。