• Class / Function / Type

      std::
    • Header file

      <>
    • Other / All

    最終更新日時(UTC):
    が更新

    履歴 編集

    constexpr関数内でのstatic constexpr変数を許可 [P2647R1]

    このページはC++23に採用された言語機能の変更を解説しています。

    のちのC++規格でさらに変更される場合があるため関連項目を参照してください。

    概要

    C++23からは、constexpr関数内で定数を定義するために、static constexpr変数を使用できるようになる。

    char xdigit(int n) {
      static constexpr char digits[] = "0123456789abcdef"; // C++20:OK, C++23:OK
      return digits[n];
    }
    
    constexpr char xdigit(int n) {
      static constexpr char digits[] = "0123456789abcdef"; // C++20:NG, C++23:OK
      return digits[n];
    }
    

    C++20まではconstexpr内でstatic constexpr変数を定義できなかったため、関数外でのstatic constexpr変数の定義や、consteval関数で定数を返すなどの回避策がとられていたが、C++23からはそのような回避策が必要なくなる。

    関連項目

    参照