C++11 引入了移动语义,例如,它可以在 C++03 需要执行复制构造或复制分配的情况下提高代码性能。本文报告说,以下代码在使用 C+11 编译时速度提高了 5 倍:
vector<vector<int> > V;
for(int k = 0; k < 100000; ++k) {
vector<int> x(1000);
V.push_back(x);
}
C++11 移动语义在科学计算环境中的影响是什么?
我对这个问题很感兴趣,但更具体地说,我也对使用 boost 库编写的有限元代码的移动语义感兴趣。我使用 boost 版本 1.47.0(因为boost 发行说明提到移动语义在 1.48.0 中引入)和 boost 版本 1.53.0测试了我自己的一些 C++03 代码,但我没有注意到有太大的改进。我猜由于解决系统矩阵构成了大部分工作量,因此不必为boost::numeric::ublas::vector
/matrix
进行复制构造所节省的任何费用并不明显。boost::function
编辑:实际上看起来移动语义仅适用于boost::function
(请参阅版本 1.52.0 发行说明)。中没有提到移动语义boost::numeric
,我对来源进行了检查以确保似乎没有右值引用。