C++ での参照による呼び出しと値による呼び出し

胡金庫 2023年10月12日
  1. C++ で&記号を使用して参照により関数を呼び出す
  2. C++ でプレーン関数定義を使用して値によって関数を呼び出す
C++ での参照による呼び出しと値による呼び出し

この記事では、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
著者: 胡金庫
胡金庫 avatar 胡金庫 avatar

DelftStack.comの創設者です。Jinku はロボティクスと自動車産業で8年以上働いています。自動テスト、リモートサーバーからのデータ収集、耐久テストからのレポート作成が必要となったとき、彼はコーディングスキルを磨きました。彼は電気/電子工学のバックグラウンドを持っていますが、組み込みエレクトロニクス、組み込みプログラミング、フロントエンド/バックエンドプログラミングへの関心を広げています。

LinkedIn Facebook

関連記事 - C++ Function