首頁 > 後端開發 > C++ > 主體

C++ 函式呼叫約定有哪些?

WBOY
發布: 2024-04-12 10:15:01
原創
616 人瀏覽過

C 中有四個函數呼叫約定:透過值傳遞、透過指標傳遞、透過引用傳遞和透過 RVO 傳遞。透過值傳遞傳遞參數的副本,透過指標傳遞傳遞參數的位址,透過引用傳遞傳遞參數的引用,而透過 RVO 傳遞則在特定條件下直接移動物件的內容。

C++ 函数调用约定有哪些?

C 函數呼叫約定

函數呼叫約定規定如何在函數呼叫過程中傳遞參數,以及在呼叫傳回時如何傳回結果。 C 中有四個主要的函數呼叫約定:

1. 透過值傳遞(pass-by-value)

  • 參數的副本傳遞給函數。
  • 函數對副本進行操作,不影響原始值。
  • 對於基本型別(int、float 等)高效率。

2. 透過指標傳遞(pass-by-pointer)

  • 參數的位址傳遞給函數。
  • 函數可以透過指標指向並修改原始值。
  • 允許函數傳回可變數量的參數。

3. 透過引用傳遞(pass-by-reference)

  • #參數的參考(別名)傳遞給函數。
  • 函數可以透過引用指向並修改原始值。
  • 比透過指標傳遞效率更高(避免了指標解引用)。

4. 透過RVO 傳遞(return value optimization,回傳值最佳化)

  • 當一個函數傳回非引用物件且該物件尚未被任何其他物件引用時,則編譯器會執行RVO。
  • 在 RVO 中,函數直接將物件的內容移到呼叫者的上下文中,而不是建立並傳回一個臨時副本。

實戰案例

// 通过值传递整数
void func_by_val(int val) {
  val++;  // 不会影响原始值
}

// 通过指针传递整数
void func_by_ptr(int *val) {
  (*val)++;  // 会影响原始值
}

// 通过引用传递整数
void func_by_ref(int &val) {
  val++;  // 会影响原始值
}

int main() {
  int a = 5;

  func_by_val(a);
  std::cout << a << std::endl;  // 输出 5

  func_by_ptr(&a);
  std::cout << a << std::endl;  // 输出 6

  func_by_ref(a);
  std::cout << a << std::endl;  // 输出 7
}
登入後複製

以上是C++ 函式呼叫約定有哪些?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板