C++ での参照による呼び出しと値による呼び出し
胡金庫
2023年10月12日
この記事では、C++ で参照による呼び出しと値による呼び出しを行う方法のいくつかの方法について説明します。
C++ で&
記号を使用して参照により関数を呼び出す
関数の引数は、関数のパラメーターを初期化する値であるため、関数定義の中核部分です。パラメータが参照の場合、引数にバインドされ、引数の値はコピーされません。対応する動作は、参照の受け渡しと呼ばれるか、関数が参照によって呼び出されます。このメソッドは、コピープロセスによって保持される余分なリソースを節約するため、関数間で比較的大きなオブジェクトを渡す必要がある場合に、より一般的に使用されることに注意してください。
関数内のオブジェクトに対して実行される操作は、変数の元のメモリ位置を変更します。これは、オブジェクトへのポインタを渡すのと同様の方法です。次の例では、単一の int
型パラメーターを取り、123
値を割り当てる func
関数を示します。i
記号は、main
プログラムの元の j
オブジェクトのエイリアス名にすぎません。ただし、&
記号は C++ ではかなりオーバーロードされているため、address-of 演算子の機能と混同しないでください。
#include <iostream>
using std::cout;
using std::endl;
void func(int &i) { i = 123; }
int main() {
int j = 0;
func(j);
cout << "j = " << j << endl;
exit(EXIT_SUCCESS);
}
出力:
j = 123
C++ でプレーン関数定義を使用して値によって関数を呼び出す
値による関数の呼び出しは、特定の関数がパラメーターをコピーし、それをそれぞれのスコープ内の個別のオブジェクトとして格納する場合の動作についてよく言われます。対応する表記には個別の記号は必要ありませんが、引数はプレーン変数として指定されます。したがって、関数ブロックスコープには別のオブジェクトがあり、それを変更しても、main
関数の元の変数には影響しません。最も一般的な方法は、渡された引数が組み込み型または関数間で簡単にコピーされる小さなオブジェクトである場合に、値による呼び出し
メソッドを使用することです。
#include <iostream>
using std::cout;
using std::endl;
void func2(int i) { i = 123; }
void func(int &i) { i = 123; }
void func(int *ip) {
*ip = 123;
ip = nullptr;
}
int main() {
int j = 0;
func(j);
cout << "j = " << j << endl;
j = 0;
func2(j);
cout << "j = " << j << endl;
j = 0;
func(&j);
cout << "j = " << j << endl;
exit(EXIT_SUCCESS);
}
出力:
j = 123
j = 0
j = 123
著者: 胡金庫