Chamada por referência x Chamada por valor em C++

Jinku Hu 12 outubro 2023
  1. Use o símbolo & para chamar a função por referência em C++
  2. Use a definição de função simples para chamar funções por valor em C++
Chamada por referência x Chamada 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
Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

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

Artigo relacionado - C++ Function