[我偶然发现了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中是否还有其他功能可以在不更改代码行的情况下提高性能?
您正确地认为不会移动对象x
。提高性能的移动操作与k
中已经存在的其他V
向量有关。