Como passar argumentos para funções em C ++ por valor vs. Por referência?

Como passar argumentos para funções em C ++ por valor vs. Por referência?
Qualquer linguagem de programação, incluindo C ++, deve ter a capacidade de fornecer parâmetros para funções. Por valor e por referência são os dois métodos principais que podem ser usados ​​para passar os parâmetros. Ambas as abordagens têm benefícios e desvantagens, por isso é crucial para os programadores saber quando utilizar cada um.

1: Passando argumentos por valor

Uma cópia da variável é feita e fornecida à função quando Argumentos são passados ​​por valor. Todas as modificações feitas na variável dentro da função afetam apenas a cópia; Nada é alterado para a variável original. Como resultado, passando por valor é um método seguro porque não há possibilidade de modificar involuntariamente o valor da variável original.

Passando por valor, No entanto, pode ser ineficaz, especialmente ao lidar com tipos de dados grandes ou complicados. Cada chamada de função que requer uma cópia dos dados pode esgotar rapidamente a CPU e os recursos de memória. Além disso, passando por valor não pode ser usado para funções que visam alterar o valor da variável original porque a cópia e a variável original não estão vinculadas.

2: Passando argumentos por referência

Variáveis ​​podem ser Passado por referência também em C ++, o que ajuda a resolver esses problemas. A variável original é enviada para a função quando passando por referência, e quaisquer modificações realizadas na variável dentro da função também afetarão a variável original. Devido a esta, passando por referência é substancialmente mais eficaz para tipos de dados grandes ou complicados e evita a necessidade de copiar.

Para evitar modificações não intencionais, uma função deve ser explicitamente designada como const. Adicionar a palavra -chave const à declaração de função, como em "int calcular (const int & a, const int & b)", conseguirá isso.

No entanto, Argumentos passantes por referência requer atenção cuidadosa aos detalhes também. Programadores inexperientes podem cometer erros, como criar efeitos colaterais não intencionais, compartilhamento não intencional de dados e substituição de dados externos.

Considere o seguinte código que demonstra ambos Métodos de passagem de argumento:

#incluir
usando namespace 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;
retornar 0;

No código acima, a primeira função, PassbyValue, recebe um argumento inteiro por valor. Dentro da função, uma nova variável inteira é criada e atribuída o valor 5. O número inteiro original permanece não modificado. A segunda função, PassbyReference, recebe um argumento inteiro por referência. Nesse caso, a função manipula diretamente a variável original.

Saída

Como esperado, a primeira chamada sai 5, mas não tem efeito na variável original. Por outro lado, a segunda chamada altera o valor de num2 para 5, o que afeta a saída da declaração final.

Passe por valor vs. Passe por referência

1: Maneira de chamar uma função

Uma diferença entre passando por valor e passando por referência é como a função é chamada. Quando passando por valor, A chamada de função deve incluir o valor da variável, como 'calcular (a, b)'. Quando passando por referência, A chamada de função deve incluir o endereço de memória da variável, simbolizado por um caráter ampersa e, como 'Calcule (& a, & b)'.

2: Tipos de dados

Em geral, passando por valor é mais apropriado ao trabalhar com tipos de dados pequenos ou simples, ou quando a função não se destina a modificar a variável original. Passando por referência é mais apropriado para tipos de dados grandes ou complexos, ou quando a função se destina a modificar o valor da variável original.

Conclusão

Quando os parâmetros são passado por valor Para uma função, uma cópia da variável é criada e fornecida. Por passando por referência, a variável original é enviada para a função. Em c++, argumentos passantes por valor ou por referência é um conceito fundamental. A escolha da abordagem correta depende das circunstâncias específicas e deve ser cuidadosamente avaliada. Os benefícios de usar o referência A abordagem pode resultar em um código mais eficaz, apesar da tentação de usar o mais fácil passando por valor método.