Eigen和c++11的赋值和引用

Eigen and c++11 assignment and rreference

我对 C++11 的移动语义感到非常困惑,尤其是对 eigen - 它是否具有右值赋值运算符 (operator=(Type&&))?

此代码因大小不匹配而崩溃:

    Eigen::VectorXd&& func(){
        Eigen::VectorXd&& v=Eigen::VectorXd::Zero(5);
        return std::move(v);
    }

    Eigen::VectorXd v=Eigen::VectorXd::Zero(10);
    v.block(0,0,5,1)=func();

唯一可行的方法是将 func 定义为:

    Eigen::VectorXd func(){
        Eigen::VectorXd v=Eigen::VectorXd::Zero(5);
        return v;
    }

即使是常规的单一引用 (&) 也不起作用。我什么时候可以使用这些参考资料?内存是怎么回事? 谢谢!

您正在返回对局部变量的引用。它是一个右值引用并不重要,局部变量在函数 returns.

时被破坏

你的 returns 按值的版本是最好的,因为它将自动利用移动构造函数(假设 Eigen 实现了移动构造函数)。