一般化された定数式 (C++11)

C++11 標準は、定数式の概念を一般化し、宣言指定子として新規キーワード constexpr を導入しています。 定数式は、コンパイル時にコンパイラーによって評価できる式です。 この機能の主要な利点は、以下のとおりです。
  • コンパイル時の評価を必要とする、コードの型の安全性と移植性を向上させる。
  • システム・プログラミング、ライブラリー作成、および汎用プログラミングのサポートを向上させる。
  • 標準ライブラリー・コンポーネントのユーザビリティーを向上させる。 コンパイル時に評価できるライブラリー関数は、定数式を必要とするコンテキストで使用できます。
constexpr 指定子を持つオブジェクト宣言は、オブジェクトを定数として宣言します。 constexpr 指定子は、以下のコンテキストに対してのみ適用できます。
  • オブジェクトの定義
  • 関数または関数テンプレートの宣言
  • リテラル型の静的データ・メンバーの宣言

コンストラクターではない関数を constexpr 指定子を指定して宣言すると、その関数は constexpr 関数になります。 同様に、コンストラクターを constexpr 指定子を指定して宣言すると、そのコンストラクターは constexpr コンストラクターになります。

この機能を使用して、定数式は、テンプレートおよび非テンプレートの constexpr 関数、クラス・リテラル型の constexpr オブジェクト、および定数式で初期化された const オブジェクトに対する参照境界を組み込むことができます。

コンパイル時の浮動小数点演算の評価は、-qfloat オプションのデフォルトのセマンティクスを使用します。