Chamada por referência x Chamada por valor em C++
-
Use o símbolo
&
para chamar a função por referência em C++ - Use a definição de função simples para chamar funções por valor em C++
Este artigo explicará vários métodos de como chamar por referência em vez de chamar por valor em C++.
Use o símbolo &
para chamar a função por referência em C++
Os argumentos da função são a parte central da definição da função, pois são os valores que inicializam os parâmetros da função. Quando o parâmetro é uma referência, ele é vinculado ao argumento e o valor do argumento não é copiado. O comportamento correspondente é chamado de passagem pela referência ou que a função é chamada por referência. Observe que esse método é mais comumente usado quando objetos relativamente maiores precisam ser passados entre as funções, pois economiza recursos extras mantidos pelo processo de cópia.
As operações realizadas no objeto dentro da função modificarão a localização original da memória da variável, que é um método semelhante a passar o ponteiro para o objeto. No exemplo a seguir, demonstramos a função func
que usa um único parâmetro de tipo int
e atribui o valor 123
. O símbolo i
é apenas o nome alternativo do objeto j
original do programa main
. Lembre-se, porém, que o símbolo &
é bastante sobrecarregado em C++ e não deve ser confundido com a funcionalidade do operador de endereço.
#include <iostream>
using std::cout;
using std::endl;
void func(int &i) { i = 123; }
int main() {
int j = 0;
func(j);
cout << "j = " << j << endl;
exit(EXIT_SUCCESS);
}
Resultado:
j = 123
Use a definição de função simples para chamar funções por valor em C++
Chamar a função por valor é freqüentemente dito para o comportamento quando a função dada copia o parâmetro e o armazena como um objeto separado no respectivo escopo. A notação correspondente não requer nenhum símbolo distinto, mas os argumentos são especificados como variáveis simples. Consequentemente, o escopo do bloco de função tem um objeto separado e as modificações nele não afetam a variável original da função main
. A prática mais comum seria empregar o método chamar por valor
quando os argumentos passados fossem tipos internos ou pequenos objetos facilmente copiados entre funções.
#include <iostream>
using std::cout;
using std::endl;
void func2(int i) { i = 123; }
void func(int &i) { i = 123; }
void func(int *ip) {
*ip = 123;
ip = nullptr;
}
int main() {
int j = 0;
func(j);
cout << "j = " << j << endl;
j = 0;
func2(j);
cout << "j = " << j << endl;
j = 0;
func(&j);
cout << "j = " << j << endl;
exit(EXIT_SUCCESS);
}
Resultado:
j = 123
j = 0
j = 123
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook