微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

通过 const&、&& 或仅通过值获取返回值哪个更好?

如何解决通过 const&、&& 或仅通过值获取返回值哪个更好?

#include <vector>

std::vector<int> f()
{
    return std::vector<int>(1024);
}

void use_1(std::vector<int> const&)
{}

void use_2(std::vector<int> const&)
{}

int main()
{
    {
        auto const& v = f(); // style 1
        use_1(v);
        use_2(v);
    }

    {
        auto&& v = f(); // style 2
        use_1(v);
        use_2(v);
    }

    {
        auto v = f(); // style 3
        use_1(v);
        use_2(v);
    }
}

哪个更好? style 1style 2 还是 style 3

在我看来,如果返回类型没有实现移动语义,那么 style 1style 2style 3 更有效率em>.

解决方法

按值不会出错,而且效率也不低。生命的时间是明确的,它永远不会摇摆不定。参考版本容易出错。举个例子:

#include <utility>

struct Bar {};

template <class T>
auto&& foo(T&& t) {
  return std::forward<T>(t);
}

int main() { 
  auto&& bar = foo(Bar{});
  // bar dangles
}

您可能认为“这永远不会发生”,但随着代码库变得越来越复杂,它确实发生了。保持简单。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。