在 C++ 中按引用呼叫與按值呼叫的比較

Jinku Hu 2023年10月12日
  1. 在 C++ 中使用&符號通過引用來呼叫函式
  2. 使用純函式定義在 C++ 中按值呼叫函式
在 C++ 中按引用呼叫與按值呼叫的比較

本文將解釋幾種在 C++ 中如何通過引用進行呼叫與通過值進行呼叫的方法。

在 C++ 中使用&符號通過引用來呼叫函式

函式引數是函式定義的核心部分,因為它們是用於初始化函式引數的值。當引數是引用時,它將繫結到引數,並且引數的值不會被複制。相應的行為稱為通過引用傳遞,或者該函式通過引用呼叫。請注意,此方法在需要在函式之間傳遞相對較大的物件時更常用,因為它節省了複製過程佔用的額外資源。

在函式內部對物件執行的操作將修改變數的原始儲存位置,這類似於將指標傳遞給物件的方法。在下面的示例中,我們演示了 func 函式,該函式帶有單個 int 型別引數並分配了 123 值。i 符號只是 main 程式中原始 j 物件的別名。請注意,&符號在 C++ 中是過載的,不應與操作符地址功能混淆。

#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
作者: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

DelftStack.com 創辦人。Jinku 在機器人和汽車行業工作了8多年。他在自動測試、遠端測試及從耐久性測試中創建報告時磨練了自己的程式設計技能。他擁有電氣/ 電子工程背景,但他也擴展了自己的興趣到嵌入式電子、嵌入式程式設計以及前端和後端程式設計。

LinkedIn Facebook

相關文章 - C++ Function