在 C++ 中的函式內呼叫函式

Jinku Hu 2023年10月12日
  1. C++ 中的函式呼叫機制
  2. 使用 return 語句在 C++ 中的函式內呼叫函式
  3. 使用 std::pair 從 C++ 函式返回兩個值
在 C++ 中的函式內呼叫函式

本文將介紹幾種在 C++ 中如何在函式內呼叫函式的方法。

C++ 中的函式呼叫機制

呼叫函式需要計算其引數的值,這些引數的值放在本地範圍內。由於函式主體中通常包含區域性變數,因此需要有一個新的儲存空間,稱為堆疊框架。如果涉及強制轉換操作,則將函式引數複製或引用為具有相應名稱的引數,並對其進行轉換。完成前面的步驟後,將執行功能塊中的語句,直到遇到 return 為止。return 語句強制將控制流返回給呼叫函式。此時,將丟棄自動分配的堆疊幀,並從呼叫者程式碼繼續進行控制。

這些函式具有返回型別,該返回型別定義應傳遞給呼叫者程式碼的物件的型別。我們可以有一個不返回任何值並以 void 型別表示的函式。如果函式具有有效的返回型別,我們可以連結多個函式呼叫,如以下示例程式碼所示。注意,內部的 addTwoInts 首先被執行,返回的值作為其引數之一傳遞給外部的 addTwoInts

#include <iostream>

using std::cin;
using std::cout;
using std::endl;
using std::string;

int addTwoInts(int i, int j) { return i + j; }

int main() {
  cout << "2 + 1 + -3  = " << addTwoInts(addTwoInts(2, 1), -3) << endl;
  cout << "(10 + 10) + (11 + -11) = "
       << addTwoInts(addTwoInts(10, 10), addTwoInts(11, -11)) << endl;
  cout << "(12 + -9) + 10) + -11) = "
       << addTwoInts(addTwoInts(addTwoInts(12, -9), 10), -11) << endl;

  return EXIT_SUCCESS;
}

使用 return 語句在 C++ 中的函式內呼叫函式

在函式中呼叫函式的另一種有用方法是利用 return 語句。請注意,被呼叫的函式應具有一個返回值以適合該表示法,否則不進行編譯。此外,如果 return 語句之後的唯一表示式是被呼叫方函式,則呼叫函式應具有相同的返回型別,如以下示例程式碼所示。

#include <iostream>

using std::cin;
using std::cout;
using std::endl;
using std::string;

int addTwoInts(int i, int j) { return i + j; }

int multiplyAccumulate(int i, int j) { return addTwoInts(i, i * j); }

int main() {
  cout << "multiplyAccumulate(1,2) = " << multiplyAccumulate(2, 2) << endl;

  return EXIT_SUCCESS;
}

使用 std::pair 從 C++ 函式返回兩個值

在某些情況下,該函式適合將多個值返回給呼叫函式。在這種情況下,可以利用 std::pair 結構將每個元素儲存在相應的資料成員中並傳遞值。可以使用指向陣列的指標或為給定問題提供足夠功能的任何 STL 容器傳遞更多元素。

#include <iostream>
#include <vector>

using std::cin;
using std::cout;
using std::endl;
using std::string;
using std::vector;

std::pair<int, int> findMaxMin(vector<int> &arr) {
  std::pair<int, int> ret;

  auto max = std::max_element(arr.begin(), arr.end());
  auto min = std::min_element(arr.begin(), arr.end());

  ret.first = arr.at(std::distance(arr.begin(), max));
  ret.second = arr.at(std::distance(arr.begin(), min));
  return ret;
}

int main() {
  vector<int> array = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

  auto ret = findMaxMin(array);
  cout << "Maximum element is " << ret.first << ", Minimum is " << ret.second
       << endl;

  return EXIT_SUCCESS;
}
作者: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

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

LinkedIn Facebook

相關文章 - C++ Function