您能解释一下为什么使用以下代码(未优化)的计算时间存在如此大的差异。我怀疑 RVO 与移动构造,但我不太确定。
一般来说,遇到这种情况时的最佳做法是什么?初始化非 POD 数据时,循环中的自动声明是否被视为不好的做法?
在循环内使用 auto :
std::vector<int> foo()
{
return {1,2,3,4,5};
}
int main()
{
for (size_t i = 0; i < 1000000; ++i)
auto f = foo();
return 0;
}
输出 :
./a.out 0.17s user 0.00s system 97% cpu 0.177 total
循环外的向量实例:
std::vector<int> foo()
{
return {1,2,3,4,5};
}
int main()
{
std::vector<int> f;
for (size_t i = 0; i < 1000000; ++i)
f = foo();
return 0;
}
输出 :
./a.out 0.32s user 0.00s system 99% cpu 0.325 total