La palabra clave auto en C++ utilizada para la inferencia de tipo
-
la palabra clave
auto
en C++ -
Usar
auto
con funciones en C++ -
Usar
auto
con variables en C++ -
Usar
auto
con iteradores en C++ -
Usar
auto
con parámetros de funciones en C++ -
Errores al usar la palabra clave
auto
en C++ - Conclusión
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.