gpt4 book ai didi

c++ - 在c++中使用move有什么好处

转载 作者:行者123 更新时间:2023-11-28 01:16:45 26 4
gpt4 key购买 nike

我有以下功能

std::pair<Eigen::ArrayXXd, Eigen::VectorXd> f(...){
...
auto a = Eigen::ArrayXXd(N,M);
auto b = Eigen::VectorXd(M);
...
return {std::move(a), std::move(b)};
}

int main() {
...
const auto &[a_up, b_up] = f(...);
writeToFile("b_up.txt", b_up);
...
}

在函数 f 中,我们分配并初始化特征数组和 vector ab。使用 move 关键字,我们仍然使用在函数 f 中分配的相同内存。使用 const auto & b_up = f(...) 也在函数 f 之外使用相同的内存空间,因此我们无需复制任何内容。它是否正确?但是与 Pass-by-reference 相比有什么优势。会发生复制吗?

最佳答案

f 函数中的 return 语句创建 std::pair 女巫不会被进一步复制,由于 RVO,即使你写:

auto ab_pair  = f(...);

但是 ab 仍然必须移动或复制,但是有一种方法可以使用 std::piecewise_construct 然后用 RVO 通过引用返回它:

auto f(...){
std::pair<Eigen::ArrayXXd, Eigen::VectorXd> result{
std::piecewise_construct,
std::make_tuple(N,M),
std::make_tuple(M),
};

...

return result;
}

关于c++ - 在c++中使用move有什么好处,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58448996/

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