「constexpr」の版間の差分

提供: C++入門
移動: 案内検索
(ページの作成:「constexpr とは、C++11で導入された指定子で、変数の定義、関数や関数テンプレートの宣言、リテラル型の静的データメン...」)
(相違点なし)

2013年12月29日 (日) 13:51時点における版

constexpr とは、C++11で導入された指定子で、変数の定義、関数や関数テンプレートの宣言、リテラル型の静的データメンバの宣言に適用するものです。constexpr宣言された変数は、コンパイル時に定数になります。constexpr宣言された関数やコンストラクタは、コンパイル時と実行時に呼び出せます。リテラル型のオブジェクトは、コンパイル時に定数になります。

読み方

constexpr
こんすと いーえっくすぴーあーる

概要

constexpr とは、C++11で導入された指定子で、変数の定義、関数や関数テンプレートの宣言、リテラル型の静的データメンバの宣言に適用するものです。

constexpr宣言された変数は、コンパイル時に定数になります。

constexpr int zero = 0;	// constexpr 変数
auto x = foo<int, zero>;	// テンプレートに渡すことが可能

constexpr宣言された関数やコンストラクタは、コンパイル時と実行時に呼び出せます。

constexpr int zero(){return 0;}		// constexpr関数
constexpr int cc_time_zero = zero();	// コンパイル時に呼び出し
int runtime_zero = zero();		// 実行時に呼び出し

リテラル型のオブジェクトは、コンパイル時に定数になります。

struct literal_type{};
constexpr auto literal = literal{};

constとの違い

  • constは、定数としてオブジェクトを宣言する。これは、オブジェクトが変更されず、値が変わらないことを意味する。コンパイラは、最適化に利用できる。初期化されたあとに、プログラマが誤って上書きしてはいけないオブジェクトを変更するのを防止できる。
  • constは、コンパイル時に定数ではなくてもよい。
  • constは、初期化しが定数式の場合、定数式になる。
  • それ以外の場合は、const修飾をしているだけ。

関連項目