El uso de la nueva palabra clave auto
ha reducido mis tiempos de ejecución de código. Entrecerré el problema con el siguiente fragmento de código simple:Penalización de rendimiento con la palabra clave 'auto' en Visual Studio 2010
#include <iostream>
#include <map>
#include <vector>
#include <deque>
#include <time.h>
using namespace std;
void func1(map<int, vector<deque<float>>>& m)
{
vector<deque<float>>& v = m[1];
}
void func2(map<int, vector<deque<float>>>& m)
{
auto v = m[1];
}
void main() {
map<int, vector<deque<float>>> m;
m[1].push_back(deque<float>(1000,1));
clock_t begin=clock();
for(int i = 0; i < 100000; ++i) func1(m);
cout << "100000 x func1: " << (((double)(clock() - begin))/CLOCKS_PER_SEC) << " sec." << endl;
begin=clock();
for(int i = 0; i < 100000; ++i) func2(m);
cout << "100000 x func2: " << (((double)(clock() - begin))/CLOCKS_PER_SEC) << " sec." << endl;
}
La salida de recibo en mi i7/máquina Win7 (modo de lanzamiento; VS2010) es:
100000 x func1: 0.001 sec.
100000 x func2: 3.484 sec.
¿Puede alguien explicar por qué el uso auto
resultados en tiempos de ejecución tan diferentes?
Obviamente, hay una solución simple, es decir, dejar de usar auto
en conjunto, pero espero que haya una mejor manera de solucionar este problema.
Maldición, tienes que ser muy rápido para responder a estas preguntas. ;-) – Andre
Pensé (pero supongo que me equivoqué) que el auto utiliza el tipo de devolución de la función. El tipo de retorno del operador [] es una referencia, entonces ¿por qué necesitamos agregar el extra '&'? – MDman
@MDman: 'auto' elimina el cv de nivel superior y la referencia," descompone "el tipo deducido. – Xeo