yar*_*yar 1 c++ eigen c++11 eigen3
我想使用对特征矩阵块的自动引用:
#include <Eigen/Dense>
using namespace Eigen;
void foo(MatrixXf& a)
{
auto& a_block = a.block(2, 3, 4, 5);
a_block = MatrixXf::Random(4,5);
}
Run Code Online (Sandbox Code Playgroud)
这不能用 GCC 编译,因为a.block(2, 3, 4, 5)被评估为临时的,但a.block(2, 3, 4, 5) = MatrixXf::Random(4,5);工作得很好。
从我的角度来看,这不是预期的行为。这个问题有优雅的解决方案吗?这应该被视为对 Eigen 的错误/功能请求吗?
编辑:
使用auto而不是auto&解决问题!
该问题已被标记为Reference atemporary in msvc的重复项,但与 MSVC 无关。我也明确表示,很明显是a.block(2, 3, 4, 5)评估成临时的。问题是这是否是 Eigen 的正确行为。