La palabra clave auto en C++ utilizada para la inferencia de tipo

Suraj P 12 octubre 2023
  1. la palabra clave auto en C++
  2. Usar auto con funciones en C++
  3. Usar auto con variables en C++
  4. Usar auto con iteradores en C++
  5. Usar auto con parámetros de funciones en C++
  6. Errores al usar la palabra clave auto en C++
  7. Conclusión
La palabra clave auto en C++ utilizada para la inferencia de tipo

Este tutorial abordará la palabra clave auto introducida en C++ 11. Veremos diferentes ejemplos para comprender sus casos de uso y los errores comunes que se cometen al usarlo.

la palabra clave auto en C++

La palabra clave auto en la versión C++ 11 es parte de la función Inferencia de tipo. La inferencia de tipos significa deducir el tipo de datos de una función o una variable en tiempo de compilación.

Por lo tanto, no tenemos que especificar el tipo de datos que el compilador puede inferir automáticamente en tiempo de compilación. La declaración de retorno nos ayuda a inferir el tipo de datos de retorno para las funciones.

Mientras que, en el caso de las variables, la inicialización ayuda a determinar el tipo de datos.

Usar auto con funciones en C++

#include <iostream>
using namespace std;

auto division() {
  double a = 55.0;
  double b = 6.0;
  double ans = a / b;
  return ans;
}

int main() { cout << division(); }

Producción :

9.16667

Aquí, la declaración de retorno ayuda al compilador a inferir el tipo de retorno de nuestra función division(). Dado que la función devuelve ans, un tipo doble, el compilador infiere que auto debe ser reemplazado por un doble.

Usar auto con variables en C++

#include <iostream>
#include <typeinfo>
using namespace std;

int main() {
  auto x = 10;
  auto y = 10.4;
  auto z = "iron man";

  cout << x << endl;
  cout << y << endl;
  cout << z << endl;
}

Producción :

10
10.4
iron man

Basado en el lado derecho de la declaración, también llamados inicializadores, el compilador infiere el tipo de variable.

Usar auto con iteradores en C++

Cuando se trata de contenedores STL como vector, conjunto o mapa, la palabra clave auto se usa mucho para iterar sobre ellos. Podemos minimizar la pérdida de tiempo saltándonos la larga declaración del iterador.

#include <bits/stdc++.h>
using namespace std;

int main() {
  vector<int> v{22, 14, 15, 16};

  vector<int>::iterator it = v.begin();  // without auto
  auto it2 = v.begin();

  while (it2 != v.end()) {
    cout << *it2 << " ";
    it2++;
  }
  cout << endl;

  map<int, int> mp;
  mp.insert(pair<int, int>(1, 40));
  mp.insert(pair<int, int>(2, 30));
  mp.insert(pair<int, int>(3, 60));
  mp.insert(pair<int, int>(4, 20));

  map<int, int>::iterator vt = mp.begin();  // without auto
  auto vt2 = mp.begin();

  while (vt2 != mp.end()) {
    cout << vt2->first << " -> " << vt2->second << endl;
    vt2++;
  }
  cout << endl;
}

Producción :

22 14 15 16
1 -> 40
2 -> 30
3 -> 60
4 -> 20

Observamos la diferencia entre usar el auto y no. Sin auto, tenemos que especificar explícitamente el tipo de iterador, lo cual es tedioso ya que las sentencias son bastante largas.

Usar auto con parámetros de funciones en C++

En C++, debemos especificar los parámetros de la función cada vez, pero esto se puede simplificar usando auto.

#include <bits/stdc++.h>
using namespace std;

void myfunc(auto x, auto str) { cout << x << " " << str << endl; }

int main() {
  int x = 10;
  string str = "Iron Man";
  myfunc(x, str);
}

Producción :

10 Iron Man

La deducción de tipos de datos ocurre durante la llamada a la función. En consecuencia, se produce la coincidencia de variables y el compilador determina los tipos de datos exactos para todos los argumentos.

Errores al usar la palabra clave auto en C++

Confusión de enteros vs booleanos

En C++, sabemos que los valores booleanos se inicializan como 0 o 1. Ahora, esto podría crear cierta confusión durante la depuración.

#include <bits/stdc++.h>
using namespace std;

int main() { auto temp = 0; }

Declaraciones múltiples utilizando la palabra clave auto

Declaramos las variables de una sola vez para ahorrar tiempo, pero esto podría crear problemas si ambas son de tipos diferentes.

#include <bits/stdc++.h>
using namespace std;

int main() { auto x = 10, y = 35.66; }

Producción :

[Error] inconsistent deduction for 'auto': 'int' and then 'double'

Cuando compilamos el código anterior en un compilador, obtenemos un error y esto sucede porque el compilador se confunde.

Conclusión

Entendimos que la palabra clave auto ahorra mucho tiempo dedicado a escribir código básico, centrándose en las partes más intensivas y complejas de un programa. Aunque es muy útil, debemos tener cuidado con la forma en que lo usamos.

Autor: Suraj P
Suraj P avatar Suraj P avatar

A technophile and a Big Data developer by passion. Loves developing advance C++ and Java applications in free time works as SME at Chegg where I help students with there doubts and assignments in the field of Computer Science.

LinkedIn GitHub