vso*_*tco 6 c++ move eigen c++11
关于Eigen,我有几个问题:
有没有人知道是否有任何计划支持很快在Eigen移动语义?在Eigen3网页的TODO列表中找不到任何内容.现在我正在使用这个swap技巧摆脱临时工,比如说
MatrixXd foo()
{
MatrixXd huge_matrix(N,N); // size N x N where N is quite large
// do something here with huge_matrix
return huge_matrix;
}
MatrixXd A(N, N);
A.swap(foo());
Run Code Online (Sandbox Code Playgroud)
我非常想swap用C++ 11风格编写上面的代码
A = foo();
Run Code Online (Sandbox Code Playgroud)
而不必担心临时返回foo().
A = foo();来摆脱这种临时性吗?或者最安全的赌注是使用swap()?复制elision将完成这项工作.即使是C++ 03编译器也会忽略它.
特别是,对于此代码,NRVO(命名返回值优化)将
MatrixXd foo()
{
MatrixXd huge_matrix(N,N);
return huge_matrix;
}
MatrixXd A = foo();
Run Code Online (Sandbox Code Playgroud)
huge_matrix在内部构建A.C++ 03标准在[class.copy]/15中指定:
在以下情况下允许复制操作的这种省略(可以组合以消除多个副本):
- 在
return具有类返回类型的函数的语句中,当表达式是具有与函数返回类型相同的cv-unqualified类型的非易失性自动对象的名称时,可以通过直接构造自动对象来省略复制操作进入函数的返回值- 当一个未绑定到引用(12.2)的临时类对象被复制到具有相同cv-nonqualified类型的类对象时,可以通过将临时对象直接构造到省略副本的目标中来省略复制操作
| 归档时间: |
|
| 查看次数: |
2349 次 |
| 最近记录: |