En utilisant le nouveau auto
a dégradé les temps d'exécution de mon code. J'ai trouvé le problème dans le simple extrait de code suivant :
#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;
}
Le résultat que j'obtiens sur ma machine i7 / Win7 (mode Release ; VS2010) est le suivant :
100000 x func1: 0.001 sec.
100000 x func2: 3.484 sec.
Quelqu'un peut-il expliquer pourquoi utiliser auto
entraîne des temps d'exécution si différents ?
Il existe évidemment une solution de contournement simple, à savoir cesser d'utiliser auto
tout à fait, mais j'espère qu'il existe un meilleur moyen de surmonter ce problème.