当不存在xvalue时,移动语义如何应用于以下代码段?

问题描述 投票:0回答:1

[我偶然发现了following article,但不了解C ++ 98和C ++ 11之间的性能差异,正如作者所说,这归因于移动语义。

#include <vector>

using namespace std;

int main() {
    vector<vector<int> > V;

    for(int k = 0; k < 100000; ++k) {
        vector<int> x(1000);
        V.push_back(x);
    }

    return 0;
}

据我所知,V.push_back(x)不会调用任何移动语义。我相信x是左值,并且此代码段在C ++ 98和C ++ 11中都调用相同的vector::push_back(const T&)

代码在两个版本上均相同地编译:https://godbolt.org/z/q3Lzae

作者的陈述不正确,还是编译器足够聪明以至于x即将被销毁?

如果作者不正确,那么在C ++ 11中是否还有其他功能可以在不更改代码行的情况下提高性能?

c++ c++11 move-semantics
1个回答
1
投票

您正确地认为不会移动对象x。提高性能的移动操作与k中已经存在的其他V向量有关。

© www.soinside.com 2019 - 2024. All rights reserved.