與流行的看法相反,在類別定義中初始化靜態常數積分不足以產生所需的必要定義通過其他代碼。從提供的程式碼報告的編譯錯誤可以看出,仍然強制需要單獨定義:
#include <algorithm> #include <iostream> class test { public: static const int N = 10; }; int main() { std::cout << test::N << "\n"; std::min(9, test::N); // Error: Undefined reference to `test::N' }
這個問題源自於 std::min 的參數取得機制:它透過 const 引用捕獲值。如果按值獲取,則不需要單獨定義。
雖然在類別外部定義靜態 const 成員可以解決問題,但有一個更好的解決方案:使用 constexpr 關鍵字。這消除了單獨定義的需要並處理其他邊緣情況。
class test { public: static constexpr int N = 10; };
以上是為什麼靜態常數整數成員需要在 C 中單獨定義?的詳細內容。更多資訊請關注PHP中文網其他相關文章!