gpt4 book ai didi

c++ - 什么时候可以按值(value)返回?

转载 作者:太空宇宙 更新时间:2023-11-04 16:02:28 26 4
gpt4 key购买 nike

我仍然不太确定按值返回在 C++ 中什么时候是个好主意,什么时候不是。在下面的情况下,可以吗?

vector<int> to_vec(const Eigen::MatrixXi& in){
vector<int> out;
// copy contents of in into out
return out;
}

Eigen::MatrixXi to_eigen(const vector<int>& in){
Eigen::MatrixXi out;
// copy contents of in into out
return out
}

根据这些对象 vectorMatrixXi 的实际工作方式,它可能会产生昂贵的拷贝。另一方面,我假设他们利用 C++ 的移动功能通过重用底层数据以低成本复制。

在不完全了解实现的情况下,我可以假设什么?

最佳答案

在声明局部变量、初始化它并按值返回它的情况下,您可以非常安全地假设您的编译器将 elide拷贝。

这种情况称为命名返回值优化。本质上,不是在函数调用中分配返回值,而是在调用点完成并作为引用传入。按值返回是这里的最佳选择,因为您无需在调用站点声明变量即可传入,但性能将与您拥有的一样。

在 C++17 中,copy elision will be mandatory在大多数涉及纯右值的情况下(例如 T t = get_t();return get_t()),但对于 NRVO 仍然是可选的。

关于c++ - 什么时候可以按值(value)返回?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41118520/

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