Как да предавате аргументи на функции в C++: по стойност срещу по препратка?

Kak Da Predavate Argumenti Na Funkcii V C Po Stojnost Sresu Po Prepratka



Всеки език за програмиране, включително C++, трябва да има способността да предоставя параметри на функции. от стойност и от справка са двата основни метода, които могат да се използват за предаване на параметри. И двата подхода имат предимства и недостатъци, така че за програмистите е изключително важно да знаят кога да използват всеки от тях.

1: Предаване на аргументи по стойност

Копие на променливата се прави и се предоставя на функцията, когато аргументите се предават по стойност . Всички модификации, направени на променливата във функцията, засягат само копието; нищо не се променя спрямо оригиналната променлива. Като резултат, преминаване по стойност е сигурен метод, тъй като няма възможност за неволно модифициране на стойността на оригиналната променлива.

Преминаване по стойност , обаче, може да е неефективно, особено когато се работи с големи или сложни типове данни. Всяко извикване на функция, изискващо копие на данните, може бързо да изчерпи ресурсите на процесора и паметта. Освен това, преминаване по стойност не може да се използва за функции, които имат за цел да променят стойността на оригиналната променлива, тъй като копието и оригиналната променлива не са свързани.







2: Предаване на аргументи по препратка

Променливите могат да бъдат предадено чрез справка в C++, което помага за решаването на тези проблеми. Оригиналната променлива се изпраща на функцията when преминаване чрез справка , и всички модификации, извършени на променливата във функцията, също ще засегнат оригиналната променлива. Заради това, преминаване чрез справка е значително по-ефективен за големи или сложни типове данни и избягва необходимостта от копиране.



За да се предотвратят нежелани модификации, функцията трябва да бъде изрично обозначена като const. Добавянето на ключовата дума const към декларацията на функцията, както в „int калкулация(const int& a, const int& b),“ ще постигне това.



Въпреки това, предаване на аргументи чрез препратка изисква и внимателно внимание към детайла. Неопитните програмисти могат да направят грешки, като например създаване на непреднамерени странични ефекти, неволно споделяне на данни и отмяна на външни данни.





Разгледайте следния код, който демонстрира и двете методи за предаване на аргументи :

#include

използване на пространство от имена std ;

невалиден PassByValue ( вътр х ) {

х = 5 ;

cout << „Вътре в PassByValue:“ << х << endl ;

}

невалиден PassByReference ( вътр и х ) {

х = 5 ;

cout << „Вътре в PassByReference:“ << х << endl ;

}

вътр основен ( ) {

вътр номер1 = 2 , бр.2 = 2 ;

cout << 'Преди извикване на функция: num1= ' << номер1 << ' num2 = ' << бр.2 << endl ;

PassByValue ( номер1 ) ;

PassByReference ( бр.2 ) ;

cout << 'След извикване на функция: num1= ' << номер1 << ' num2 = ' << бр.2 << endl ;

връщане 0 ;

}

В горния код, първата функция, PassByValue , получава целочислен аргумент по стойност. В рамките на функцията се създава нова целочислена променлива и й се присвоява стойност 5. Оригиналното цяло число остава непроменено. Втората функция, PassByReference , получава целочислен аргумент чрез препратка. В този случай функцията директно манипулира оригиналната променлива.



Изход

Както се очаква, първото извикване извежда 5, но няма ефект върху оригиналната променлива. За разлика от това, второто извикване променя стойността на num2 на 5, което засяга изхода на крайния оператор.

Предаване по стойност срещу предаване по референция

1: Начин за извикване на функция

Една разлика между преминаване по стойност и преминаване чрез справка така се нарича функцията. Кога преминаване по стойност , извикването на функцията трябва да включва стойността на променливата, като например „calculate(a, b)“. Кога преминаване чрез справка , извикването на функцията трябва да включва адреса на паметта на променливата, символизиран със знак амперсанд, като например „calculate(&a, &b)“.

2: Типове данни

Общо взето, преминаване по стойност е най-подходящ при работа с малки или прости типове данни или когато функцията не е предназначена да модифицира оригиналната променлива. Преминаване по справка е по-подходящ за големи или сложни типове данни или когато функцията е предназначена да промени стойността на оригиналната променлива.

Заключение

Когато параметрите са предава се по стойност към функция се създава и доставя копие на променливата. от преминаване чрез справка , оригиналната променлива се изпраща на функцията. В C++, предаване на аргументи по стойност или по препратка е фундаментално понятие. Изборът на правилния подход зависи от конкретните обстоятелства и трябва да бъде внимателно оценен. Ползите от използването на справка подходът може да доведе до по-ефективен код, въпреки изкушението да се използва по-лесният преминаване по стойност метод.