Yeni auto
anahtar sözcüğünü kullanarak kod yürütme süreleri azaldı. Aşağıdaki basit kod parçalarında problem daralmış:Visual Studio 2010'da 'auto' anahtar sözcüğünü kullanan performans cezası
#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;
}
benim i7/Win7 makinesi (Yayın modu; VS2010) almak çıkışı:
100000 x func1: 0.001 sec.
100000 x func2: 3.484 sec.
kimse açıklayabilir auto
sonuçlarını kullanarak neden Böyle farklı uygulama sürelerinde?
Açıkçası, basit bir geçici çözüm var, yani auto
'u kullanmayı bırakın ama umarım bu sorunun üstesinden gelmenin daha iyi bir yolu vardır.
Kahretsin, o sorulara cevap vermek gerçekten hızlı olmak zorunda. ;-) – Andre
Düşündüm (ama sanırım yanılıyordum) bu otomatik fonksiyonun dönüş türünü kullanır. Operatör [] referans tipi referanstır, öyleyse neden ekstra '&' eklememiz gerekiyor? – MDman
@MDman: 'auto', üst düzey cv'yi ve referansı kaldırır, çıkarılan türü" bozar ". – Xeo