使用新的auto
关键字会降低我的代码执行时间。我将问题缩小到以下简单的代码片段:
#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;
}
我在我的i7 / Win7机器上运行(发布模式; VS2010),得到的输出是:
100000 x func1: 0.001 sec.
100000 x func2: 3.484 sec.
有人能解释一下为什么使用auto
会导致如此不同的执行时间吗?
显然,有一个简单的解决方法,即停止完全使用auto
,但我希望有更好的方法来解决这个问题。
auto
关键字会移除顶层的常数限定符和引用类型,它会让推导出来的类型 "衰变"。 - Xeoauto
以这种方式运行的原因之一。 - Xeo