Jak przekazać argumenty do funkcji w C ++ według wartości vs. Przez odniesienie?

Jak przekazać argumenty do funkcji w C ++ według wartości vs. Przez odniesienie?
Każdy język programowania, w tym C ++, musi mieć możliwość dostarczania parametrów do funkcji. Przez wartość i przez odniesienie to dwie główne metody, które można użyć do przekazywania parametrów. Oba podejścia mają zalety i wady, więc programistowie kluczowe jest, kiedy można je wykorzystać.

1: Przekazywanie argumentów według wartości

Kopia zmiennej jest wykonana i dostarczana do funkcji, gdy Argumenty są przekazywane przez wartość. Wszystkie modyfikacje dokonane na zmiennej wewnątrz funkcji wpływają tylko na kopię; Nic nie zmieni się na oryginalną zmienną. W rezultacie, przekazywanie wartości jest bezpieczną metodą, ponieważ nie ma możliwości niezamierzonej modyfikacji wartości oryginalnej zmiennej.

Przekazywanie wartości, może jednak być nieskuteczne, szczególnie w przypadku dużych lub skomplikowanych typów danych. Każde wywołanie funkcyjne wymagające kopii danych może szybko wyczerpać zasoby procesora i pamięci. Ponadto, przekazywanie wartości nie można użyć do funkcji, które mają na celu zmianę wartości oryginalnej zmiennej, ponieważ kopia i oryginalna zmienna nie są połączone.

2: Przekazywanie argumentów przez odniesienie

Zmienne mogą być przekazane przez odniesienie w C ++, co pomaga rozwiązać te problemy. Oryginalna zmienna jest wysyłana do funkcji, gdy przechodzenie przez odniesienie, a wszelkie modyfikacje przeprowadzone na zmiennej wewnątrz funkcji również wpłyną na oryginalną zmienną. Z tego powodu, przechodzenie przez odniesienie jest znacznie bardziej skuteczny w przypadku dużych lub skomplikowanych typów danych i unika potrzeby kopiowania.

Aby zapobiec niezamierzonym modyfikacjom, funkcję należy wyraźnie wyznaczyć jako Const. Dodanie słowa kluczowego Const do deklaracji funkcji, jak w „Int oblicz (const int & a, const int & b)”, osiągnie to.

Jednakże, Przekazywanie argumentów przez odniesienie wymaga również starannej dbałości o szczegóły. Niedoświadczeni programiści mogą popełniać błędy, takie jak tworzenie niezamierzonych skutków ubocznych, niezamierzone udostępnianie danych i zastępowanie danych zewnętrznych.

Rozważ następujący kod, który pokazuje oba metody przekazywania argumentów:

#włączać
za pomocą przestrzeni nazw Std;
void passbyValue (int x)
x = 5;
Cout << "Inside PassByValue: " << x << endl;

void passbyReference (int & x)
x = 5;
Cout << "Inside PassByReference: " << x << endl;

int main ()
int num1 = 2, Num2 = 2;
Cout << "Before function calls: num1= " << num1 << " num2= " << num2 << endl;
PassByValue (NUM1);
PassbyReference (NUM2);
Cout << "After function calls: num1= " << num1 << " num2= " << num2 << endl;
powrót 0;

W powyższym kodzie pierwsza funkcja, PassbyValue, otrzymuje argument liczb całkowitych według wartości. W ramach funkcji tworzona jest nowa zmienna całkowita i przypisana wartość 5. Oryginalna liczba całkowita pozostaje niezmodyfikowana. Druga funkcja, PasbyReference, otrzymuje argument liczb całkowitych przez odniesienie. W takim przypadku funkcja bezpośrednio manipuluje oryginalną zmienną.

Wyjście

Zgodnie z oczekiwaniami, pierwsze wywołanie wywołuje 5, ale nie ma wpływu na oryginalną zmienną. Natomiast drugie połączenie zmienia wartość NUM2 na 5, co wpływa na wyjście instrukcji końcowej.

Przekazać wartość vs. Przejść przez odniesienie

1: sposób wywołania funkcji

Jedna różnica między przekazywanie wartości I przechodzenie przez odniesienie to sposób nazywania funkcji. Gdy przekazywanie wartości, wywołanie funkcji musi zawierać wartość zmiennej, taką jak „Oblicz (a, b)”. Gdy przechodzenie przez odniesienie, Wywołanie funkcyjne musi zawierać adres pamięci zmiennej, symbolizowany przez znak AMPERSand, taki jak „Oblicz (& a, & b)”.

2: Typy danych

Ogólnie, przekazywanie wartości jest najbardziej odpowiednie podczas pracy z małymi lub prostymi typami danych lub gdy funkcja nie jest przeznaczona do modyfikowania oryginalnej zmiennej. Przechodzenie przez odniesienie jest bardziej odpowiednie dla dużych lub złożonych typów danych lub gdy funkcja ma na celu zmodyfikowanie wartości oryginalnej zmiennej.

Wniosek

Gdy parametry są przekazane wartością Do funkcji tworzona i dostarczana jest kopia zmiennej. Przez przechodzenie przez odniesienie, oryginalna zmienna jest wysyłana do funkcji. W c++, przekazywanie argumentów według wartości lub przez odniesienie to fundamentalna koncepcja. Wybór właściwego podejścia zależy od konkretnych okoliczności i powinno być dokładnie ocenione. Korzyści płynące z korzystania z odniesienie Podejście może skutkować bardziej efektywnym kodem, pomimo pokusy, aby użyć łatwiejszego przekazywanie wartości metoda.