C++ での参照を返す

C Deno Can Zhaowo Fansu



C++ は、ポインタではなく参照によって値またはアドレスを返す機能を提供します。ポインターの代わりに参照を使用すると、C++ プログラムの読み取りと管理が簡単になります。 C++ では、参照とポインターは互いに密接に関係しています。主な違いは、参照は別の変数の別名、つまり「エイリアス」にすぎないのに対し、ポインタは値の追加などの操作に使用できることです。参照は、元の値の別名または複製であり、「&」記号で示されます。

例 1:

「iostream」ヘッダー ファイルをインポートし、「std」名前空間を利用します。多くの関数が定義されているため、ヘッダー ファイルは C++ コードでインポートされます。次に、関数名「returnTheValue」に「&」記号を配置して、リターン参照関数を作成します。







ここで、「値」参照が挿入されます。この下に、「&value」参照を使用して値とアドレスを出力します。次に、リターン参照を配置し、「値」を配置します。ここで「main()」が呼び出され、「n1」が値「44」で初期化されます。その下では、「int& n2」が「returnTheValue(n1)」で初期化されます。ここで、「n1」の値とそのアドレスを出力します。次に、「cout」を利用して「n2」の値と「n2」のアドレスを出力します。



コード 1:



#include
名前空間 std を使用します。
整数 & 値を返す ( 整数 & 価値 )
{
コート << 「値 = 」 << 価値 << 終わり
<< ' 値のアドレスは '
<< & 価値 << 終わり;
戻る 価値;
}
整数メイン ( )
{
あなた n1 = 44 ;
整数 & n2 = 戻り値 ( n1 ) ;
コート << 「n1 = 」 << n1 << 終わり
<< ' n1 のアドレスは '
<< & n1 << 終わり;
コート << 「n2 = 」 << n2 << 終わり
<< 「n2のアドレスは」
<< & n2 << 終わり;
戻る 0 ;
}


出力:





ここで、以下に示すように、参照は別の変数の代替名にすぎないことに注意してください。 value のアドレスである「n1」と「n2」は決して変化しません。



例 2:

「iostream」ヘッダー ファイルをインポートした後、「std」名前空間を使用します。次に、関数名「MyReturnValueFunc」と「&」記号を使用して、戻り参照関数を構築します。 「v1」変数への参照はここに配置されます。この下に「&v1」参照を含む値とアドレスを出力します。次に、この場所に「return」と「v1」を利用して「return 参照」を挿入します。ここでは、「main()」が呼び出され、「num_1」が値「19」で初期化されます。 「int& num_2」の初期化は「MyReturnValueFunc(num_1)」で行われます。

現在、「num_1」の値とアドレスを出力し、「cout」を使用して「num_2」の値とアドレスを出力します。ここで、「MyReturnValueFunc」によって返されたアドレスを利用して、「num_1」の値を変更します。この関数は、「v1」の代替名を返します。これは、「num_1」の代替名でもあります。そこで、値を変更して「91」に設定します。ここではエイリアスとして機能する「MyReturnValueFunc(num_1)」に「91」を割り当てます。次に、値と「num_1」のアドレスを再度出力します。

コード 2:

#include
名前空間 std を使用します。
整数 & MyReturnValueFunc ( 整数 & v1 )
{
コート << 'v1 の値 = ' << v1 << 終わり
<< ' v1 変数のアドレスは '
<< & v1 << 終わり;
戻る v1;
}
整数メイン ( )
{
int num_1 = 19 ;
整数 & num_2 = MyReturnValueFunc ( num_1 ) ;
コート << 'num_1 の値 = ' << num_1 << 終わり
<< ' num_1 のアドレスは '
<< & num_1 << 終わり;
コート << 'num_2 の値 = ' << num_2 << 終わり
<< ' num_2 のアドレスは '
<< & num_2 << 終わり;
MyReturnValueFunc ( num_1 ) = 91 ;
コート << 'ここで、num_1 の値 = ' << num_1 << 終わり
<< 「num_1 のアドレスは」
<< & num_1 << 終わり;
戻る 0 ;
}


出力:

以下に示すように、「v1」、「num_1」、および「num_2」値のアドレスは一定のままであるため、参照は別の変数の代替名にすぎないことがわかります。

例 3:

「iostream」ヘッダー ファイルがインポートされ、「std」名前空間が使用されます。ヘッダー ファイルには多数の関数が指定されているため、それらを C++ コードにインポートします。ここでは、参照を返す「int& my_ref」を配置する「ReturnRefFun()」関数を作成します。ここでは参照関数として「int&ReturnRefFun」を宣言しています。この後、「my_ref」変数の値をインクリメントします。その下に「my_ref」の参照を返す「return」を入れます。

この後、ここで「main()」メソッドが呼び出されます。次に、「first_value」変数を「21」で初期化します。この下では、「ReturnRefFun」関数に「first_value」を配置して参照のコピーを返し、それを「copied_value」変数に保存します。次に、「cout」を利用して「first_value」と「copyed_value」の両方を出力します。この下に、「copied_value++」を配置して、「copied_value」変数をインクリメントします。次に、インクリメント後の「copied_value」と、「cout」を使用して「first_value」を出力します。この後、「ReturnRefFun(first_value)」で「int& ref_value」変数を初期化して参照を返します。

この後、コピーした「my_ref」変数の値を出力します。次に、「first_value」変数の値を出力します。この下に「ref_value++」を入れて「ref_value」の値を増やします。この下には、「ref_value」の増分値と、「cout」を使用して「first_value」変数も出力します。 「ref_value」を変更すると、「first_value」も変更されます。

コード 3:

#include
名前空間 std を使用します。
整数 & リターンリファレンスファン ( 整数 & my_ref {
my_ref++;
戻る 私の参照;
}
整数メイン ( {
整数 最初の値 = 21 ;
整数 コピーされた値 =ReturnRefFun ( 最初の値 ;
コート << '最初の値は次のとおりです:' << 最初の値 << 終わり;
コート << 'コピーされた値は次のとおりです:' << コピーされた値 << 終わり;
コピーされた値++;
コート << 'copyed_value が増加します:' << コピーされた値 << 終わり;
コート << 「最初の値:」 << 最初の値 << 終わり;
整数 & 参照値 =ReturnRefFun ( 最初の値 ;
コート << 「コピーされた参照値:」 << 参照値 << 終わり;
コート << 「最初の値:」 << 最初の値 << 終わり;
ref_value++;
コート << '基準値が増加します:' << 参照値 << 終わり;
コート << 「最初の値:」 << 最初の値 << 終わり;
戻る 0 ;
}


出力:

これは、「リターンリファレンス」テクニックを利用した前のコードの結果です。この例では、参照変数の複製を返すことと、参照変数自体を返すことの違いを示しています。

例 4:

ここでは、参照変数を返す参照関数として「int& rByRef」を宣言しています。この「int& rByref()」関数に「int& data」を渡します。ここでは、「data」変数のアドレスを出力し、その下のリターン参照を利用します。ここで、「main()」メソッドを呼び出した後、「x_var」変数を初期化します。次に、「cout」に「&x_var」を入れて、「x_var」のアドレスをここに出力します。

この下では、「rByref(x_var)」を「int& y_var」に代入することで参照変数を利用します。次に、その「&y_var」参照変数のアドレスも出力します。この下では、「x_var」変数を「z_var」変数にコピーし、このコピーされた変数のアドレス「&z_var」も出力します。この後、「rByref()」関数を呼び出し、その内部のパラメータとして「x_var」変数を渡し、この変数に「93」を割り当てます。また、「cout」に「&x_var」を入れて、「x_var」のアドレスを再度レンダリングします。

コード 4:

#include
名前空間 std を使用します。
整数 & rByref ( 整数 & データ
{
コート << 「データのアドレス:」 << & データ << 終わり;
戻る データ;
}
整数メイン (
{
int x_var = 42 ;
コート << 「x_var のアドレス:」 << & x_var << 終わり;
整数 & y_var = rByref ( x_var ;
コート << 「y_var のアドレス:」 << & y_var << 終わり;
int z_var = rByref ( x_var ;
コート << 「z_var のアドレス:」 << & z_var << 終わり;
rByref ( x_var = 93 ;
コート << 「x_var のアドレス:」 << & x_var << 終わり;
戻る 0 ;
}


出力:

結果から、クローン変数のアドレス「z_var」が、元の変数「x_var」が参照する他のすべての場所とは異なることがわかります。

結論

「リターンリファレンス」の概念については、このチュートリアルで詳しく説明します。 「リターン参照」は C++ プログラミングの「ポインタ」に似ていることがわかりました。どの関数が参照を返すかを示すには、関数の戻り値の型で「&」記号を使用する必要があることについて説明しました。このチュートリアルでは、いくつかの例とその結果を示し、この概念を理解しました。