[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