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 实现了移动构造函数)。
我对 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 实现了移动构造函数)。