1

次のコード(最適化されていない)で計算時間にこのような違いがある理由を教えてください。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 合計

4

2 に答える 2