Llamada por referencia vs llamada por valor en C++

Jinku Hu 12 octubre 2023
  1. Utilice el símbolo & para llamar a la función por referencia en C++
  2. Use la definición de función simple para llamar a funciones por valor en C++
Llamada por referencia vs llamada por valor en C++

Este artículo explicará varios métodos de cómo llamar por referencia frente a llamar por valor en C++.

Utilice el símbolo & para llamar a la función por referencia en C++

Los argumentos de la función son la parte central de la definición de la función, ya que son los valores que inicializan los parámetros de la función. Cuando el parámetro es una referencia, está vinculado al argumento y el valor del argumento no se copia. El comportamiento correspondiente se llama pasar por la referencia o que la función se llame por referencia. Tenga en cuenta que este método se usa más comúnmente cuando se deben pasar objetos relativamente más grandes entre las funciones, ya que ahorra recursos adicionales retenidos por el proceso de copia.

Las operaciones que se realizan en el objeto dentro de la función modificarán la ubicación de memoria original de la variable, que es un método similar a pasar el puntero al objeto. En el siguiente ejemplo, demostramos la función func que toma un único parámetro de tipo int y asigna el valor 123. El símbolo i es simplemente el nombre de alias del objeto j original del programa main. Sin embargo, tenga en cuenta que el símbolo & está bastante sobrecargado en C++ y no debe confundirse con la funcionalidad del operador de dirección de.

#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);
}

Producción :

j = 123

Use la definición de función simple para llamar a funciones por valor en C++

Llamar a la función por valor a menudo se dice para el comportamiento cuando la función dada copia el parámetro y lo almacena como un objeto separado en el ámbito respectivo. La notación correspondiente no requiere ningún símbolo distinto, pero los argumentos se especifican como variables simples. En consecuencia, el alcance del bloque de funciones tiene un objeto separado, y las modificaciones al mismo no afectan la variable original de la función main. La práctica más común sería emplear el método llamar por valor cuando los argumentos pasados ​​son tipos incorporados o pequeños objetos que se copian fácilmente entre funciones.

#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);
}

Producción :

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

Artículo relacionado - C++ Function