一般化された定数式 (C++11)
C++11 標準は、定数式の概念を一般化し、宣言指定子として新規キーワード constexpr を導入しています。
定数式は、コンパイル時にコンパイラーによって評価できる式です。
この機能の主要な利点は、以下のとおりです。
- コンパイル時の評価を必要とする、コードの型の安全性と移植性を向上させる。
- システム・プログラミング、ライブラリー作成、および汎用プログラミングのサポートを向上させる。
- 標準ライブラリー・コンポーネントのユーザビリティーを向上させる。 コンパイル時に評価できるライブラリー関数は、定数式を必要とするコンテキストで使用できます。
constexpr 指定子を持つオブジェクト宣言は、オブジェクトを定数として宣言します。
constexpr 指定子は、以下のコンテキストに対してのみ適用できます。
- オブジェクトの定義
- 関数または関数テンプレートの宣言
- リテラル型の静的データ・メンバーの宣言
コンストラクターではない関数を constexpr 指定子を指定して宣言すると、その関数は constexpr 関数になります。 同様に、コンストラクターを constexpr 指定子を指定して宣言すると、そのコンストラクターは constexpr コンストラクターになります。
この機能を使用して、定数式は、テンプレートおよび非テンプレートの constexpr 関数、クラス・リテラル型の constexpr オブジェクト、および定数式で初期化された const オブジェクトに対する参照境界を組み込むことができます。
コンパイル時の浮動小数点演算の評価は、-qfloat オプションのデフォルトのセマンティクスを使用します。