變數上的 const 與 constexpr
乍一看,以下定義似乎是等效的:
const double PI = 3.141592653589793; constexpr double PI = 3.141592653589793;
然而,有一個微妙但重要的
編譯時和運行時常數
聲明為 const 的變數可以在編譯時或運行時初始化。宣告為 constexpr 的變數必須在編譯時初始化。
因此,PI1 是執行時間常數,而 PI2 是編譯時常數。這種差異很重要,因為只有編譯時常數才能在編譯時需要已知值的上下文中使用,例如陣列大小和模板參數。
用法比較
下面的例子說明了差異:
// Compile-time constant PI3 constexpr double PI3 = PI2; // OK // Compile-time error: PI1 is not a compile-time constant constexpr double PI3 = PI1; // Error // Compile-time assertion with PI2 static_assert(PI2 == 3.141592653589793, ""); // OK // Compile-time error: PI1 is not a compile-time constant static_assert(PI1 == 3.141592653589793, ""); // Error
Выбор
Выбор以上是什麼時候應該使用 `const` 和 `constexpr` 作為變數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!