functional - string c++
¿Cómo funciona ampersand en el tipo de retorno de una declaración de función? (3)
Considere estas dos funciones: power2()
y add()
:
void power2 (double& res, double x) {
res = x * x;
}
double& add (double& x) {
return ++x;
}
El primero calcula la potencia de x
y almacena el resultado en el primer argumento, res
, - no necesita devolverlo.
El segundo devuelve una referencia, lo que significa que más adelante se puede asignar un nuevo valor a esta referencia.
Ejemplo:
double res = 0;
power2(res, 5);
printf("%f/n", res);
printf("%f/n", ++add(res));
Salida:
25.000000
27.000000
Tenga en cuenta que la segunda salida es 27
, no 26; se debe al uso de ++
dentro de la llamada a printf()
.
Esta pregunta ya tiene una respuesta aquí:
En este fragmento de código, ¿por qué f () se declara como "doble & f (..."? ¿Qué significa y cómo funciona? Ni siquiera sé qué buscar en Google para encontrar la respuesta a mi pregunta. Por favor ayuda.
double a = 1, b = 2;
double & f (double & d) {
d = 4;
return b;
}
Sé que un signo comercial significa la dirección de una variable o una función, pero no veo por qué tendría sentido escribirla cuando se declara una función.
Cuando el operador &
se usa en un formulario de declaración, precedido por un tipo, no significa "la dirección de" sino una "referencia a" que es esencialmente un puntero sin referencia automática con aritmética de punteros desactivada.
No hay referencias en C, por lo que si desea pasar o regresar por referencia, debe pasar un puntero de const y desreferirlo para acceder al valor apuntado. C ++ agregó referencias para facilitar este concepto, para evitar el desplazamiento accidental de la dirección con aritmética de punteros, y para guardar la necesidad de desreferenciar el puntero. Esto hace que trabajar con él sea mucho más fácil y se traduzca en una sintaxis más clara y legible.
En este caso, el signo y no significa tomar una dirección, pero denota una referencia. Aquí, f
es una función que toma una referencia al doble como parámetro y devuelve una referencia al doble.
Es posible que desee leer acerca de las referencias de C ++ en su libro de texto de elección, ya que son una parte muy básica del idioma.