C++ Constexpr 文字列の例

C Constexpr Wen Zi Lieno Li



この記事では、C++ プログラミング言語への注目すべき追加機能である constexpr について説明します。constexpr は、C++11 で導入され、C++14 でさらに強化された C++ プログラミング言語への注目すべき追加機能であり、変数、関数、またはオブジェクト コンストラクターがコンパイル対象であることをコンパイラーに通知します。時定数。これは、開発者が定数を作成および操作する方法に革命をもたらしました。 constexpr を使用すると、開発者は不変の式と値を定義でき、実行時ではなくコンパイル時に評価されます。 constexpr をコードに組み込むことの最大の利点は、不変性が保証されることです。

C++ Constexpr 文字列の用途は何ですか?

constexpr を使用すると、実行可能ファイルがよりコンパクトで最適化されます。値はコンパイラによって事前に決定されるため、結果として得られるバイナリのサイズを小さくすることができ、システム リソースのより経済的な使用が実現され、さまざまなプラットフォームでのソフトウェアのパフォーマンスが向上します。この機能の特に重要な利点の 1 つは、実行時の計算が削減されることです。可能な限りコンパイル プロセス中に値が計算されるため、実行時評価の必要性は低くなります。この効率の向上により、実行が高速化されるだけでなく、プログラム操作全体が合理化されます。

例 1: C++ で階乗計算に Constexpr を使用する

この例では、実行時ではなくコンパイル時に計算を実行できる constexpr を使用します。階乗を計算するコンテキストでは、一般的な数学演算である constexpr を利用して、コンパイル中に階乗値を計算できます。次のコードを調べて確認してから、コードの説明を見てみましょう。







#include

constexpr 整数 階乗 ( 整数 n ) {

戻る n <= 1 ? 1 : ( n * 階乗 ( n - 1 ) ) ;

}

整数 主要 ( ) {

整数 1つに = 5 ;

標準 :: コート << 「の階乗」 << 1つに << 「=」 << 階乗 ( 1つに ) << 標準 :: 終わり ;

}

指定されたコード例は、再帰的な方法で数値の階乗を計算するための constexpr の使用を示しています。この例では、階乗関数が constexpr 指定子を使用して宣言および定義されているため、コンパイラはコンパイル時に階乗式を評価できます。 C++ プログラムで constexpr を使用すると、コンパイラはコンパイル時に 5 の階乗式を評価するため、実行時の計算が不要になります。



次に、具体的な詳細と説明とともにコードの詳細な内訳を見てみましょう。



まず、#include を使用して、コンソールに出力するための「std::cout」などの重要な入出力機能を提供する「iostream」ヘッダー ファイルを組み込みます。





その後、factorial() 関数 (再帰的) に進みます。これは「constexpr int fastial(int n)」です。この fastial() 関数は、「n」整数の階乗を計算する再帰関数を定義します。 Constexpr は、コンパイル中に関数を評価することでパフォーマンスの最適化が可能であることを意味します。

戻り値は n <= 1 ? 1 : (n *階乗(n – 1)) 行では、「n」が 1 以下の場合に 1 を返すという再帰の条件式が使用されています (基本ケース)。そうでない場合は、階乗計算 (n! = n * (n-1)!) を実行します。これは、自分自身を「n – 1」で繰り返し呼び出し、結果を「n」で乗算することにより、階乗を計算するための一般的な式です。 ”。これらの行は階乗計算の門番のように機能します。数値が基本レベルにあるかどうかをチェックし、そうであれば 1 を返します。そうでない場合は、関数呼び出しの連鎖反応が開始され、基本ケースに到達するまでそれぞれの関数呼び出しがより小さい数で処理されます。次に、結果が逆の順序で乗算されます。参考までに、コードの出力を次に示します。



例 2: C++ Constexpr 文字列を示す小文字のカウント

ここでは、countexpr 文字列を使用して小文字の数を数える方法を学びます。この例の目的は、constexpr 機能を使用して特定の文字列内の小文字の数をカウントし、実行時の計算を削減することです。 constexpr として宣言された countLowercase() 関数は、「string_view」文字列をパラメータとして受け取り、入力として指定された文字列の各文字を反復処理します。小文字が出現するたびにカウントが増加します。関数は定数式を操作するため、コンパイル時に結果が取得され、コンパイル時の評価の効率とパフォーマンスの利点が示されます。まず、次のコードを確認してください。次に、詳細な説明に進みます。

#include
#include <文字列ビュー>
名前空間 std を使用する ;
constexpr サイズ_t カウント小文字 ( string_view ) {
サイズ_t カウント = 0 ;
のために ( 文字 c : s ) {
もし ( 低い ( c ) ) {
カウント ++;
}
}
戻る カウント ;
}
整数 主要 ( ) {
コート << 「」内の小文字の合計 小文字 「ある=」
<< カウント小文字 ( '小文字' ) << 終わり ;
}

コードの詳細な内訳と各行の説明は次のとおりです。

#include は、標準入出力ストリーム ライブラリを使用してメッセージを出力するために組み込まれています。 #include には、効率的な文字列操作のための「string_view」クラスが含まれています。

countLowercase() 関数の「constexpr size_t count lower(string_view s)」関数は、指定された文字列ビュー内の小文字をカウントします。 int main() は、「Lower CaSe LettErS」内の小文字の数を示すメッセージを出力するプログラムのエントリ ポイントで、「Lower CaSe LettErS」を入力として countLowercase() 関数を呼び出し、結果を出力します。次のプログラムの出力を参照してください。

例 3: C++ Constexpr を利用した配列のデモンストレーション

配列のデモでは、同じデータ型の要素の構造化されたコレクションである配列が、プログラミング言語内でどのように作成、アクセス、操作されるかを示します。以下では、プログラムがコンパイル時の配列の初期化と操作の簡単な例を提供するコーディング例を通して説明します。

配列のデモでは、配列 (同じデータ型を共有する要素の構造化されたコレクション) の概念と、プログラミング言語を使用して配列を作成、アクセス、操作する方法を示します。次のコーディング例では、コンパイル時に配列を初期化し、そのサイズを計算し、指定された配列の要素を出力する方法を示します。次のコードを参照して説明に進んでください。

#include
名前空間 std を使用する ;
整数 主要 ( ) {
constexpr 整数 配列int [ 9 = { 5 55 555 5555 55555 } ;
constexpr 整数 サイズ配列 = のサイズ 配列int / のサイズ ( 整数 ) ;
コート << '配列の長さは = ' << サイズ配列 << 終わり ;
コート << '配列の要素は = ' ;
のために ( 整数 = 0 ; < サイズ配列 ; ++ ) {
コート << 配列int [ << 「」 ;
}
}

このプログラムは、constexpr 配列を初期化し、コンパイル時にその長さを計算し、配列の長さと要素をコンソールに出力します。 Constexpr は、配列とそのプロパティがコンパイル時に決定されることを保証します。コードを分解して、具体的な詳細を 1 つずつ説明してみましょう。

標準入出力ストリーム ライブラリをインクルードし、出力に「cout」などの関数を使用できるようにするには、#include を呼び出します。プログラムは int main() 関数から実行を開始します。 main() 関数内では、constexpr int arrayint[9] ステートメントを使用して、サイズ 9 の「arrayint[]」配列が定義されます。配列は 5 つの数値で初期化され、残りの要素は暗黙的に 0 のままになります。 int length_a = sizeof arrayint / sizeof(int); 「arrayint」のサイズをバイト単位で計算します。

「for」ループは「arrayint[]」配列の要素を反復処理し、値がコンソールに出力されます。指定されたコードの次の出力を見てみましょう。

結論

C++ における constexpr キーワードの導入と進化により、定数式と値の処理方法に革命が起こりました。この記事では、階乗の計算、小文字のカウント、コンパイル時の配列の初期化における constexpr の威力を示す 3 つの実際的な例を取り上げました。主な利点としては、パフォーマンスの向上、実行時間の計算の短縮、メモリ効率の向上などが挙げられます。 Constexpr は、コードベース内に信頼性の高い一定のエンティティを作成し、不変性を確保し、より合理化された効率的なプログラムに貢献するための貴重な資産です。