这样的签名的有效用例是什么?:
T&& foo();
还是右值引用仅用作参数?
如何使用这样的功能?
T&& t = foo(); // is this a thing? And when would t get destructed?
最佳答案
对于自由函数,返回右值引用没有多大意义。如果它是一个非静态本地对象,那么您永远不想返回指向它的引用或指针,因为它将在函数返回后被销毁。但是,返回对传递给函数的对象的右值引用可能是有意义的。这真的取决于用例是否有意义。
可以从返回右值引用中受益匪浅的一件事是临时对象的成员函数。假设你有
class foo
{
std::vector<int> bar;
public:
foo(int n) : bar(n) {}
std::vector<int>& get_vec() { return bar; }
};
如果你这样做
auto vec = foo(10).get_vec();
你必须复制,因为 get_vec
返回一个左值。如果您改为使用
class foo
{
std::vector<int> bar;
public:
foo(int n) : bar(n) {}
std::vector<int>& get_vec() & { return bar; }
std::vector<int>&& get_vec() && { return std::move(bar); }
};
然后 vec
将能够移动 get_vec
返回的 vector ,并且您可以为自己节省昂贵的复制操作。
关于c++ - 函数返回右值引用是否有意义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55958970/