Qual a diferença entre 'passagem por valor' e 'passagem por referência'?
A diferença entre a passagem por valor e a passagem por referência está relacionada à forma como os argumentos são tratados ao passar para uma função ou método.
Na passagem por valor, uma cópia do valor é feita e essa cópia é passada para a função. Qualquer alteração feita dentro da função não afetará o valor original fora dela. Isso ocorre porque a função está trabalhando com uma cópia inteiramente nova em um novo endereço de memória. Por exemplo:
int increment(int value) {
value = value + 1;
return value;
}
int main() {
int number = 10;
int newNumber = increment(number);
cout << newNumber; // imprime 11
cout << number; // imprime 10 - número original não foi alterado
return 0;
}
Por outro lado, na passagem por referência, o endereço de memória do argumento é passado para a função. Isso significa que a função tem acesso direto à variável original e qualquer alteração feita dentro da função afetará o valor original fora dela. Por exemplo:
void increment(int &value) {
value = value + 1;
}
int main() {
int number = 10;
increment(number);
cout << number; // imprime 11 - número original foi alterado
return 0;
}
A passagem por referência pode ser útil quando queremos modificar o valor original da variável dentro de uma função, enquanto a passagem por valor protege o valor original de qualquer alteração indesejada. Cabe ao programador decidir qual método é mais adequado para a situação em questão.