valores tipos sirve retornan que programacion para funciones funcion ejemplo c++

tipos - En C++, ¿qué significa y significa después del tipo de devolución de una función?



tipos de return en c (11)

En una función de C ++ como esta:

int& getNumber();

que significa & ? ¿Es diferente de:

int getNumber();


"&" significa referencia, en este caso "referencia a un int".


Es diferente.

int g_test = 0; int& getNumberReference() { return g_test; } int getNumberValue() { return g_test; } int main() { int& n = getNumberReference(); int m = getNumberValue(); n = 10; cout << g_test << endl; // prints 10 g_test = 0; m = 10; cout << g_test << endl; // prints 0 return 0; }

getNumberReference () devuelve una referencia, debajo del capó es como un puntero que apunta a una variable entera. Cualquier cambio aplicado a la referencia se aplica a la variable devuelta.

El getNumberReference () también es un valor a la izquierda, por lo tanto, se puede usar así:

getNumberReference() = 10;


Es una referencia


Es una referencia, que es exactamente como un puntero, excepto que no tiene que usar un operador de desreferencia de puntero (* o ->) con él, la desreferenciación del puntero es implícita.

Especialmente tenga en cuenta que todas las preocupaciones de por vida (tales como no devolver una variable de pila por dirección) todavía deben abordarse como si se usara un puntero.


La diferencia es que sin el & lo que obtienes es una copia del int devuelto, adecuado para pasar a otras rutinas, comparar con cosas, o copiar en tu propia variable.

Con el signo & , lo que obtienes es esencialmente la variable que contiene el número entero devuelto. Eso significa que puedes ponerlo en el lado izquierdo de una tarea , así:

getNumber() = 200;


La primera versión le permite escribir getNumber() = 42 , que probablemente no es lo que quiere. La devolución de referencias es muy útil cuando se sobrecarga el operator[] para sus propios tipos de contenedores. Le permite escribir container[9] = 42 .


Sí, es diferente.

El & significa que devuelve una referencia. De lo contrario, devolverá una copia (bueno, a veces el compilador lo optimiza, pero ese no es el problema aquí).

Un ejemplo es vector. El operador [] devuelve un &. Esto nos permite hacer:

my_vector[2] = 42;

Eso no funcionaría con una copia.


Sí, la int& versión devuelven una referencia a un int . La versión int devuelve un int por valor.

Consulte la sección sobre referencias en las preguntas frecuentes de C ++


Significa que es un tipo de referencia. ¿Qué es una referencia?

Wikipedia:

En el lenguaje de programación C ++, una referencia es un tipo de datos de referencia simple que es menos poderoso pero más seguro que el tipo de puntero heredado de C. El nombre de referencia de C ++ puede causar confusión, ya que en ciencias de la computación una referencia es un tipo de datos de concepto general, con punteros y Las referencias de C ++ son implementaciones de tipos de datos de referencia específicos. La declaración de la forma:

Escribe un nombre

donde es un tipo y es un identificador cuyo tipo es referencia.

Ejemplos:

  1. int A = 5;
  2. int & rA = A;
  3. extern int & rB;
  4. int y foo ();
  5. barra vacía (int & rP);
  6. clase MyClass {int & m_b; / * ... * /};
  7. int funcX () {return 42; }; int (& xFunc) () = funcX;

Aquí, rA y rB son del tipo "referencia a int", foo () es una función que devuelve una referencia a int, bar () es una función con un parámetro de referencia, que es referencia a int, MyClass es una clase con una miembro que es referencia a int, funcX () es una función que devuelve un int, xFunc () es un alias para funcX.

El resto de la explicación está here


Significa que está devolviendo una reference a un int, no a una int en sí misma.


int& getNumber() : la función devuelve un entero por referencia.

int getNumber() : function devuelve un entero por valor.

Difieren en algunos aspectos y una de las diferencias interesantes es que el primer tipo se puede usar en el lado izquierdo de la asignación, lo que no es posible con el segundo tipo.

Ejemplo:

int global = 1; int& getNumber() { return global; // return global by reference. } int main() { cout<<"before "<<global<<endl; getNumber() = 2; // assign 2 to the return value which is reference. cout<<"after "<<global<<endl; return 0; }

Ouptput:

before 1 after 2