gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 02:18:24 36 4
gpt4 key购买 nike

我对 C++11 的 move 语义感到非常困惑,尤其是对 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;
}

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

最佳答案

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

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

关于c++ - Eigen和c++11的赋值和引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34548274/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com