このブログでは、constexpr変数とconstexpr関数を利用する方法を学習します。このライブラリを利用する理由は、実行時ではなくコンパイル時に計算を実行するアプリケーションのパフォーマンスの向上させることで、コンパイル時に時間を割り当てることにより、結果的に実行時間を節約することが目的です。
constexprキーワードはC++11で導入され、C++14およびC++17で改善されました。
constexprは、オブジェクトまたは関数の値をコンパイル時に評価でき、その式を他の定数式で使用できることを指定します。 任意のコードが値を変更しようとすると、コンパイラエラーが発生します。constとは異なり、constexprは関数やクラスコンストラクタにも適用できます。 constexpr は、値または戻り値が定数であり、可能な場合はコンパイル時に計算されます。
const変数とconstexpr変数の主な違いは、const変数の初期化を実行時まで延期できることです。 constexpr変数は、コンパイル時に初期化する必要があります。 さらにconstexpr変数または関数のすべての宣言には、constexpr指定子が必要です。
[crayon-6768eb0b25fcf852960322/]C++17では、コンパイル時に条件式を推定することができます。これにより、コンパイラは誤った分岐を排除できます。
[crayon-6768eb0b25fd6355471362/]constexprを使えば、もっと驚くようなことができるようになります。ぜひ、以下のワークショップを参考してください。
constexpr関数は、関数にconstexprを指定することで、コンパイル時に関数を実行できるようになります。また実行時の値が実引数として渡された場合は、実行時に評価されます。なお、constexpr関数またはコンストラクタは暗黙のうちにインラインになります。
[crayon-6768eb0b25fd8177634708/]それでは、constexpr変数、constexpr関数を利用したユースケースを見てみましょう。
[crayon-6768eb0b25fda128998423/]このブログで紹介しましたサンプルコードは、こちらからダウンロードできます。
C++Builder 10.4では、最新のC++17の言語仕様をサポートしており、C++17の新機能もすぐに試せます。製品の詳細は、こちらを参照してください。
「C++Builderで使用方法を学ぶ」シリーズのバックナンバー
- C++BuilderでC++17ラムダ式の使用方法を学ぶ
- C++Builderで高いパフォーマンスを実現するC++17 string_viewの使用方法を学ぶ
- C++Builderで戻り値の型推論(auto)の使用方法を学ぶ