次のコード(最適化されていない)で計算時間にこのような違いがある理由を教えてください。RVO と move-construction の違いを疑っていますが、よくわかりません。
一般的に、そのようなケースに遭遇したときのベストプラクティスは何ですか? 非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 ユーザー 0.00s システム 97% CPU 0.177 合計
ループ外のベクトル インスタンス :
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 ユーザー 0.00s システム 99% CPU 0.325 合計