C++ の構造バインディング

C No Gou Zaobaindingu



構造バインディングを使用すると、各メンバーに個別にアクセスすることなく、構造体またはクラスから要素を抽出し、それらを別の変数に割り当てることができます。構造バインディングを使用すると、手動による要素抽出の必要性がなくなり、構造体またはクラスの多数の要素を個別の変数に同時に解凍できるため、コードの読みやすさと簡潔さが向上します。このチュートリアルでは、C++ での構造バインディングの仕組み、構文、例について説明します。

C++ の構造化バインディングとは何ですか?

構造バインディングは C++17 で追加された C++ 機能で、構造体またはタプルを個々の変数に分解することもできるため、コードの簡潔性が向上します。これを使用すると、構造体メンバーのアクセス構文を簡素化し、タイプミスや不正なインデックス付けによって引き起こされるエラーの可能性を低くすることができます。

構文







C++ における構造バインディングの構文は次のとおりです。



自動 [ var1 var2 ... = 表現 ;

C++ の構造体バインディングの構文では、「var1」と「var2」は変数名、「expression」は構造体またはクラスを生成する式です。 auto キーワードを使用して、自動的に作成される変数を宣言します。



修飾子

修飾子は、構造化バインディングと組み合わせて使用​​できます。それらの構文を以下に示します。





自動 & [ ある b c ... = 表現 ;

自動 && [ ある b c ... = 表現 ;

宣言で使用される「&」または「&&」演算子は、バインディングが左辺値参照であるか右辺値参照であるかを定義します。 「&」で表される左辺値参照は、バインディング変数の値を変更するために使用できる参照を確立します。参照を使用して行われた値への変更は、元の構造またはタプルに表示されます。

一方、「&&」で表される右辺値参照は、バインディングに含まれる変数の値を読み取るための利用に限定された参照を提供します。これは、メモリと時間を消費する可能性があるオブジェクトのレプリカの作成を回避できるため、破棄する必要がある一時的なオブジェクトまたは右辺値にバインドする場合に便利です。



例 1: C++ での構造体バインディング

以下は C++ 構造バインディングの例です。

#include

名前空間 std を使用する ;

構造体 立方体

{

整数 バツ ;

整数 ;

整数 ;

} ;

整数 主要 ( )

{

シーキューブ = { 10 二十 30 } ;

自動 [ x_座標 y_座標 z_座標 = c ;

コート << 'X 軸:' << x_座標 << 終わり ;

コート << 'Y軸: ' << y_座標 << 終わり ;

コート << 'Z軸:' << z_座標 << 終わり ;

戻る 0 ;

}

上の例では、3 つの整数 x、y、z を含む構造体キューブを宣言します。この構造は空間内の立方体を示しています。 cube 型の変数 c が作成され、値 (10,20,30) で初期化されます。このコードでは、構造バインディングは、構文 auto[ x_coodyne, y_coodyne, z_coodyne ] = c を使用して、struct のメンバー x、y、z の値をそれぞれ個別の変数 x_coodyne、y_coodyne、z_coodyne に割り当てます。上記の出力を以下に示します。

例 2: 構造体を解凍するための C++ での構造体バインディング

以下は、構造体を解凍する構造体バインディングの例です。

#include

#include <文字列>

名前空間 std を使用する ;

構造体 学生 {

文字列名 ;

整数 ;

} ;

整数 主要 ( ) {

学生 { 「ハムザ」 32 } ;

自動 [ 名前 = s ;

コート << 名前 << ' は ' << << 「歳です。」 << 終わり ;

戻る 0 ;

}

上記のコードでは、Student 構造体には 2 つのメンバーがあります。 名前 それは文字列と それは整数です。次に、Student オブジェクトを作成し、その各メンバーに初期値を割り当てます。次に、 s のメンバーが構造バインディングを使用して変数の名前と年齢に分割され、これらの値が以下のスクリーンショットのように出力されます。

例 3: 修飾子を使用した C++ での構造バインディング

以下は、修飾子を使用して変数の値を num1 および num2 として更新する構造バインディングの例です。

#include

#include <タプル>

名前空間 std を使用する ;

整数 主要 ( ) {

タプル < 整数 整数 > t { 25 二十 } ;

自動 & [ 番号1 番号2 = t ;

コート << 'num1 の値 = ' << 番号1 << ', num2 = ' << 番号2 << ' \n ' ;

番号1 = 30 ;

コート << 「num1の変更された値 = 」 << 番号1 << ', num2 = ' << 番号2 <<

' \n ' ;

自動 && [ 番号3 番号4 = make_tuple ( 100 250 ) ;

コート << '今度は num3 の値 = ' << 番号3 << ', num4 = ' << 番号4 << ' \n ' ;

戻る 0 ;

}

前述のコードでは、タプル t を構築し、左辺値参照を使用してそのコンポーネントを num1 と num2 にリンクします。次に、num1 の値を 30 に変更し、num1 と num2 の値を出力します。また、make_tuple(100, 250) を介して一時タプルを構築し、右辺値参照を使用してその要素を num3 と num4 に結び付けます。 num3 と num4 は右辺値参照と結合されており、make_tuple(100, 250) によって形成された一時タプルを変更するために使用することはできないため、num3 と num4 の値が出力されます。彼らはそこから読み取ることしかできません。プログラムを実行すると、次の結果が画面に表示されます。

結論

構造バインディングは、構造体またはクラスの複数の値を 1 つの式内の個々の変数に解凍する C++ の機能であり、その結果、より簡潔で読みやすく安全なコードが得られます。修飾子を使用した構造バインディングは、構造化オブジェクト内の値を変更するプロセスを効率化します。