[C con Clase] Referencias a variables
Davidson, Steven
srd4121 en njit.edu
Dom Abr 19 17:04:40 CEST 2020
Hola User,
Quiero agregar a lo que dijo Facundo.
Aquí, la función 'ref<int>()' construye un objeto de tipo
'reference_wrapper<int>' y lo retorna. Al usar 'auto', 'a' realmente es un
objeto de tipo 'reference_wrapper<int>'. Al llegar a la asignación:
a = std::ref( y );
Realmente, se crea otro objeto de tipo 'reference_wrapper<int>' que se
asigna a 'a', el cual tiene el mismo tipo de dato. Ahora, 'a' contiene
información acerca de la referencia a 'y' según el comportamiento de la
sobrecarga del operador =, la cual es miembro de 'reference_wrapper<int>'.
El uso principal de 'auto' es a la hora de crear plantillas y en general,
ayuda a la programación genérica. Si se conoce el tipo de dato exacto,
entonces sugiero escribirlo explícitamente.
Espero que esto aclare la duda.
Steven
On Sat, Apr 18, 2020 at 5:34 AM User <usuarioanonimomysql en gmail.com> wrote:
> Hola,
>
> Estoy tratando de asignar el valor de una variable 'x' de tipo entero a
> otra 'a' mediante una referencia y posteriormente hacer que el valor de
> otra variable 'y' se asigne a esa variable 'a' también mediante referencia.
>
> He visto que esto se puede hacer de esta manera (en C++11):
>
> int x;
> int y;
> auto a = std::ref(x);
> x = 9;
> std::cout << "x, " << x << "!\n";
> std::cout << "y, " << y << "!\n";
> std::cout << "a, " << a << "!\n\n";
> a = std::ref(y);
> y = 7;
> std::cout << "x, " << x << "!\n";
> std::cout << "y, " << y << "!\n";
> std::cout << "a, " << a << "!\n";
>
> La salida sería:
>
> x, 9! y, 0! a, 9! x, 9! y, 7! a, 7!
>
> Lo cual me parece lógico.
>
> Pero yo pensaba que esto lo podría hacer sin usar 'auto', es decir, así:
>
> int x;
> int y;
> auto a = std::ref(x);
> x = 9;
> std::cout << "x, " << x << "!\n";
> std::cout << "y, " << y << "!\n";
> std::cout << "a, " << a << "!\n\n";
> a = std::ref(y);
> y = 7;
> std::cout << "x, " << x << "!\n";
> std::cout << "y, " << y << "!\n";
> std::cout << "a, " << a << "!\n";
>
> Pero en este caso la salida es esta:
>
> x, 9! y, 0! a, 0! x, 9! y, 7! a, 0!
>
> Mi pregunta es, ¿siempre hay que usar 'auto' para tipos simples como 'int'
> o si por el contrario tenemos un tipo que por ejemplo es una clase
> funcionaría sin 'auto'?
>
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20200419/4381a161/attachment.html>
Más información sobre la lista de distribución Cconclase