首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

C++ 類內靜態常量初始化規則演進:為什麼 static const double 非整型在舊標準下報錯?

     編輯:程式設計疑難解答

規則演進

標準類內初始化允許類型備註
C++98/03僅 static const 整型/枚舉需在類外定義 const double A::rate = 6.5;
C++11同上,但引入 constexpr 允許字面量類型static constexpr double rate = 6.5; 仍需類外定義(ODR-used)
C++17inline static constexpr 任意字面量類型類內定義即為定義,無需類外,支援 vector 等非字面量類型需 C++20

代碼示例

// C++17 推薦寫法
class Config {
public:
    inline static constexpr double RATE = 6.5;
    inline static constexpr int VEC_SIZE = 26;
    // 非字面量類型 (vector) 仍需類外定義或 C++20
    static const std::vector<double> vec; // 類外定義
};
// Config.cpp
const std::vector<double> Config::vec = {1.0, 2.0};

編譯器支持

  • MSVC 19.14+ (VS 2017 15.7+) 完整支持 C++17 inline static。
  • GCC 7+, Clang 5+ 同樣支持。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved