Heim >Backend-Entwicklung >C++ >Der Einfluss von C++-Funktionsparameterübergabemethoden auf die Programmleistung

Der Einfluss von C++-Funktionsparameterübergabemethoden auf die Programmleistung

WBOY
WBOYOriginal
2024-04-12 21:51:021213Durchsuche

In C++ können Funktionsparameter als Wert (Erstellung einer Kopie zur Übergabe an die Funktion) oder als Referenz (Übergabe der Adresse der Originalvariablen) übergeben werden. Die Wertübergabe ist sicher, aber teuer und eignet sich für kleine Parameter oder wenn die ursprüngliche Variable geschützt werden muss. Die Referenzübergabe ist schnell, weist jedoch eine geringe Flexibilität auf und eignet sich für große Objekte oder Situationen, in denen die ursprüngliche Variable geändert werden muss. Experimente zeigen, dass beim Umgang mit großen Arrays die Übergabe per Referenz die Leistung deutlich verbessert als die Übergabe per Wert.

C++ 函数参数传递方式对程序性能的影响

Der Einfluss der C++-Funktionsparameterübergabemethode auf die Programmleistung

In C++ können Funktionsparameter als Wert oder als Referenz übergeben werden. Für verschiedene Parametertypen ist es entscheidend, die geeignete Bereitstellungsmethode zu wählen, da diese die Leistung des Programms erheblich beeinträchtigt.

Wertübergabe

Bei der Wertübergabe wird eine Kopie der Funktionsparameter an die Funktion übergeben. Das Ändern der Kopie hat keinen Einfluss auf den Wert der Originalvariablen. Obwohl die Wertübergabe eine größere Sicherheit bietet, entsteht bei der Übergabe großer Objekte ein Mehraufwand, da Parameter erstellt und kopiert werden müssen. Das folgende Codebeispiel demonstriert die Wertübergabe:

void foo(int num) {
  num++;  // 值传递副本,不会影响原始变量
}

int main() {
  int x = 5;
  foo(x);
  cout << x << endl; // 输出5,没有改变
}

Übergabe per Referenz

Bei der Übergabe per Referenz wird eine Referenz auf einen Funktionsparameter an die Funktion übergeben. Das bedeutet, dass die Funktion die Adresse der ursprünglichen Variablen erhält. An der Referenz vorgenommene Änderungen wirken sich direkt auf den Wert der ursprünglichen Variablen aus. Durch die Referenzübergabe entfällt der Mehraufwand der Wertübergabe, da kein Kopieren von Parametern erforderlich ist. Allerdings geht die Flexibilität verloren, da eine Änderung der Variablen, auf die die Referenz zeigt, nicht zulässig ist. Das folgende Codebeispiel demonstriert die Übergabe per Referenz:

void foo(int& num) {
  num++;  // 引用传递引用,更改原始变量
}

int main() {
  int x = 5;
  foo(x);
  cout << x << endl; // 输出6,已改变
}

Selektive Übergabemethode

Die Auswahl der besten Übergabemethode hängt von der Situation ab:

  • Übergabe per Wert: Wenn die ursprüngliche Variable durch a vor Änderungen geschützt werden muss Funktion oder wenn das Argument ein kleiner Wert ist.
  • Übergabe als Referenz: Wenn der Parameter ein großes Objekt ist oder wenn die Funktion die ursprüngliche Variable ändern muss.

Praktischer Fall

Im folgenden Beispiel vergleichen wir die Programmleistung bei der Übergabe eines Arrays als Wert und Referenz an die Funktion:

#include <chrono>
#include <vector>

int sum_array_by_value(const std::vector<int>& arr) {
  int sum = 0;
  for (int i : arr) {
    sum += i;
  }
  return sum;
}

int sum_array_by_reference(std::vector<int>& arr) {
  int sum = 0;
  for (int& i : arr) {
    sum += i;
  }
  return sum;
}

int main() {
  std::vector<int> arr(1000000);
  for (int i = 0; i < arr.size(); i++) arr[i] = i;

  auto start = std::chrono::high_resolution_clock::now();
  int sum1 = sum_array_by_value(arr);
  auto end = std::chrono::high_resolution_clock::now();
  int elapsed1 = std::chrono::duration_cast<std::chrono::milliseconds>(end - start).count();

  start = std::chrono::high_resolution_clock::now();
  int sum2 = sum_array_by_reference(arr);
  end = std::chrono::high_resolution_clock::now();
  int elapsed2 = std::chrono::duration_cast<std::chrono::milliseconds>(end - start).count();

  std::cout << "Sum by value: " << elapsed1 << " ms" << std::endl;
  std::cout << "Sum by reference: " << elapsed2 << " ms" << std::endl;

  return 0;
}

Während der Ausführung dieses Programms stellen wir fest, dass die Leistung durch die Übergabe als Referenz erheblich verbessert wird da große Arrays nicht kopiert werden müssen.

Das obige ist der detaillierte Inhalt vonDer Einfluss von C++-Funktionsparameterübergabemethoden auf die Programmleistung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn